当对象创建有串联时,字符串保存在哪里?
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" 是 equal
但 not the same
.
现在你的第二个问题陈述:
String d = "A" + "B";
这里有两种情况:
- 如果在第一个语句之后执行第二个语句,则不会在字符串池中创建新的字符串,因为 "A"、"B" 和 "AB" 已经存在于字符串池中,并且可以使用 Interning.
重复使用
- 如果单独执行第二条语句,那么最初在String Pool中创建两个String "A"和"B",然后将它们连接形成"AB",也存储在字符串池。
希望这能回答您的问题。干杯!
我们知道下面的字符串保存在字符串常量池中。
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" 是 equal
但 not the same
.
现在你的第二个问题陈述:
String d = "A" + "B";
这里有两种情况:
- 如果在第一个语句之后执行第二个语句,则不会在字符串池中创建新的字符串,因为 "A"、"B" 和 "AB" 已经存在于字符串池中,并且可以使用 Interning. 重复使用
- 如果单独执行第二条语句,那么最初在String Pool中创建两个String "A"和"B",然后将它们连接形成"AB",也存储在字符串池。
希望这能回答您的问题。干杯!