以下 Java 代码将创建多少个对象:
String s = "abc";
s = "";
String s2 = new String("mno");
s2 = "pqr";
以下 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..()
),然后执行以下操作之一:
String::equals(..)
)引用字符串文字(没有显式new
);