当对象创建有串联时,字符串保存在哪里?

Where a String saves when the object creation has a concatenation?

我们知道下面的字符串保存在字符串常量池中。

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";

如能清楚说明理由,不胜感激。

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

String b = new String("AB");

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

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

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

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

这里,前两个字符串"A"和"B"在字符串池中创建,并连接形成"AB",它也存储在字符串池中。 --->第一点

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

在第 I 点和第 II 点的字符串池中创建的字符串 "AB" 是 equalnot the same.

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

String d = "A" + "B";

这里有两种情况:

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

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