1

正如我们所知,以下字符串保存在字符串常量池中。

String a = "AB";

如下创建的 String 对象将保存在 Heap 中。

String b = new String("AB");

String e = b.concat("C");

此时,任何人都可以解释以下字符串的保存位置吗?

String c = new String("A"+ "B");

String d = "A" + "B";

感谢您是否可以清楚地解释原因。

4

1 回答 1

0

在继续你的目标陈述之前,对你的问题做一个小的更正。

String b = new String("AB");

String e = b.concat("C");

上面的语句将在 Heap 和 String Pool 中创建一个 String 对象以供进一步引用。

现在你的第一个问题陈述:

String c = new String("A"+ "B");

在这里,前两个字符串“A”和“B”在字符串池中创建并连接形成“AB”,该“AB”也存储在字符串池中。--->点-I

然后以“AB”为参数new String(dataString)调用构造函数。这将在堆中创建一个字符串,在字符串池中创建一个,两者的值都为“AB”。--->第二点

在 Point-I 和 II 的字符串池中创建的字符串 "AB" 是equalbut not the same

现在你的第二个问题陈述:

String d = "A" + "B";

这里有两种情况:

  1. 如果在第一条语句之后执行第二条语句,则不会在字符串池中创建新的字符串,因为字符串池中已经存在“A”、“B”和“AB”,并且可以使用Interning重用。
  2. 如果第二条语句单独执行,则最初在字符串池中创建两个字符串“A”和“B”,然后将它们连接形成“AB”,该“AB”也存储在字符串池中。

希望这能回答你的问题。干杯!

于 2018-09-03T18:02:20.310 回答