正如我们所知,以下字符串保存在字符串常量池中。
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 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”也存储在字符串池中。--->点-I
然后以“AB”为参数new String(dataString)
调用构造函数。这将在堆中创建一个字符串,在字符串池中创建一个,两者的值都为“AB”。--->第二点
在 Point-I 和 II 的字符串池中创建的字符串 "AB" 是equal
but not the same
。
现在你的第二个问题陈述:
String d = "A" + "B";
这里有两种情况:
希望这能回答你的问题。干杯!