2

以下 Java 代码将创建多少个对象:

String s = "abc";
s = "";
String s2 = new String("mno");
s2 = "pqr";
4

1 回答 1

2
  1. String s = "abc";→ 一个对象,进入字符串池,使用文字“abc”;
  2. s = "";→ 一个空字符串 ( "") 对象,并再次 - 在字符串池中分配;
  3. String s2 = new String("mno");→ 另一个使用显式new关键字创建的对象,请注意,它实际上涉及另一个文字对象(再次 - 在字符串池中创建) - "mno"; 总的来说,这里有两个对象;
  4. s2 = "pqr";→ 另一个对象,被存储到字符串池中。

因此,总共有 5 个对象;4 个在字符串池(又名“实习池”)中,一个在普通堆中。

请记住,每当您使用"string literal"时,JVM 首先检查字符串池中是否存在相同的字符串对象(根据String::equals..()),然后执行以下操作之一:

  1. 如果对应的字符串不存在,JVM 会创建一个字符串对象并将其放入字符串池中。该字符串对象是 JVM 可重用的候选对象,在任何时候等于它(再次,根据String::equals(..))引用字符串文字(没有显式new);
  2. 如果对应的字符串存在,它的引用只是被返回,没有创建任何新的东西。
于 2021-04-08T16:31:24.207 回答