简介:
字符串常量池是Java 虚拟机 (JVM),用于存储常量值,包括字符串文字。当 JVM 在编译期间遇到字符串文字时,它会检查池中是否存在具有相同值的现有字符串。如果找到,对新文字的引用将定向到现有字符串,从而避免创建新实例。
使用“new”关键字进行实习:
但是,在创建新的 String 对象时使用“new”关键字会引入不同的行为,如所提供的参考文献中所述。虽然对 String 文字(在本例中为“test”)的引用仍将放置在池中,但 JVM 有义务在运行时创建一个新的 String 对象,而不是重用池中的对象。
问题:
如果池中对字符串文字的引用与使用“new”创建时相同,那么 JVM 不应该返回现有引用而不是创建新引用?
答案:
不,当使用“new”运算符时,JVM 不会返回现有引用。相反,它将创建一个新的 String 对象并将其分配给由“new”关键字创建的引用。这是因为:
示例:
在此示例中,“literal”和“two”引用指向池中的同一个 String 对象。然而,“one”引用指向“new”创建的另一个 String 对象。因此,使用“==”进行相等比较将返回 false。
澄清:
语句“当编译器遇到字符串文字时,它会检查池以查看如果相同的字符串已存在”应解释为“在池中”,这意味着只有已被保留或显式添加到池中的字符串文字才会被考虑进行保留。
以上是为什么即使常量池中存在对同一文字的引用,Java 仍会创建一个新的字符串对象?的详细内容。更多信息请关注PHP中文网其他相关文章!