java - 字符串池中将创建多少个对象?

标签 java string object heap-memory

在下面的 Java 代码中将创建多少个对象:

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

最佳答案

  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. 如果存在相应的字符串,则只返回其引用,而不创建任何新内容。

关于java - 字符串池中将创建多少个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66998710/

相关文章:

java - 一个空对象有多少字节?

javascript - 将元素附加到页面隐藏输入字段

java - 耶拿 TDB java.lang.ExceptionInInitializerError

java - 按字母顺序排列字符的 HashMap

c - 从字符中删除字母并重新打印该字符

sql - SQL中的转义字符

javascript - 无法向 Mongoose 的对象响应添加新键

java - 如何告诉代理服务器不要缓存响应?

Java 未经检查的 arraylist 转换

java.exe 进程使用了​​更多内存并且没有释放它