以下 Java 代码将创建多少个对象:
String s = "abc";
s = "";
String s2 = new String("mno");
s2 = "pqr";
答案 0 :(得分:2)
String s = "abc";
→ 一个对象,进入字符串池,因为使用了文字“abc”;s = "";
→ 一个空字符串 (""
) 对象,再次 - 在字符串池中分配;String s2 = new String("mno");
→ 使用显式 new
关键字创建的另一个对象,请注意,它实际上涉及又一个文字对象(再次 - 在字符串池中创建)- "mno"
;总的来说,这里有两个对象;s2 = "pqr";
→ 另一个对象,被存储到字符串池中。所以,总共有5个对象; 4 个在字符串池中(又名“实习池”),一个在普通堆中。
请记住,无论何时使用 "string literal"
,JVM 都会首先检查字符串池中是否存在相同的字符串对象(根据 String::equals..()
),然后执行以下操作之一:
String::equals(..)
)字符串文字被引用(没有显式new
);