在下面的 Java 代码中将创建多少个对象:
String s = "abc";
s = "";
String s2 = new String("mno");
s2 = "pqr";
最佳答案
String s = "abc";
→ 一个对象,进入字符串池,因为使用了文字“abc”;s = "";
→ 一个空字符串 (""
) 对象,并且再次 - 在字符串池中分配;String s2 = new String("mno");
→ 使用显式new
关键字创建的另一个对象,请注意,它实际上涉及 另一个 文字对象(再次在字符串池中创建)-"mno"
;总的来说,这里有两个对象;s2 = "pqr";
→ 另一个对象,被存储到字符串池中。
因此,总共有 5 个对象; 4 个在字符串池(又名“实习生池”)中,一个在普通堆中。
请记住,无论何时您使用“string literal”
,JVM 首先检查是否存在相同的字符串对象(根据String::equals..()
)字符串池,然后执行以下操作之一:
- 如果对应的字符串不存在,JVM会创建一个字符串对象,并将其放入字符串池中。该字符串对象是 JVM 可以重用的候选者,任何时候等于它(同样,根据
String::equals(..)
)引用字符串文字(没有显式new
); - 如果存在相应的字符串,则只返回其引用,而不创建任何新内容。
关于java - 字符串池中将创建多少个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66998710/