如果我写下面的代码
场景-1 [最初在字符串常量池中没有值]
String s1 = new String("test");
然后创建了多少个对象?
根据我的回答: 创建了两个对象::一个是在字符串文字池中,另一个是因为new而在堆中 参考:refer link
为什么char []显示在refer link
中场景-2 [最初在字符串常量池中没有值]
String s1 = "test";
String s2 = new String("test");
然后创建了多少个对象?
根据我的回答: 三个对象创建::一个在s1的字符串文字池中,第二个在堆中,因为s2为new,第三个为s [char [] 参考:refer link
我的回答是正确的?请给我一个确切的想法,哪一个是对的?
答案 0 :(得分:0)
String s1 = new String("test");
JVM在堆上创建两个对象,在常量池中创建另一个对象。
String s1 = "test"; //Line 1
String s2 = new String("test"); //Line 2
第1行将在常量池中创建一个对象(如果尚未存在)。 第2行将仅在堆上创建,因为池中已存在一个
如果你看一下String类,你会发现它初始化了一个最终的char []来创建一个不可变对象,但那些仅限于实例化:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
.
.
.
/**
* Initializes a newly created {@code String} object so that it represents
* an empty character sequence. Note that use of this constructor is
* unnecessary since Strings are immutable.
*/
public String() {
this.value = "".value;
}
.
.
.
}