字符串池中会创建多少个对象?

时间:2021-04-08 06:53:54

标签: java string object heap-memory

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

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

1 个答案:

答案 0 :(得分: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. 如果存在相应的字符串,则只返回其引用,不会创建任何新内容。
相关问题