在 Java 中,像“abc”这样的“字符串文字”是内部存储的,这意味着对同一文字值的多个引用指向同一个值内存中的实例。这有助于优化内存使用和性能。但是,将 new 与字符串文字一起使用,例如 new String("abc"),会创建一个新的字符串对象,即使该文字已存在于字符串池中。
提出了关于字符串池的两个陈述一些混乱:
澄清一下,语句 2 意味着即使使用 new 创建对象,字符串文字仍然保留在字符串池中,但无论如何都会构造一个新对象。
在例如:
String one = new String("test"); String two = "test";
由于实习,传递给 new String("test") 的引用与两个相同。然而,一个值为“test”的新 String 对象被创建并赋值给一个。
因此,有两个独立的值为“test”的 String 对象:一个在常量池中(被两个引用)以及用 new 创建的新的(由 1 引用)。这就是为什么 one.equals(two) 为 true(它们具有相同的值),但 one == Two 为 false(它们引用不同的对象)。
语句 1 应该改写为“当编译器遇到一个字符串文字,它检查池中是否已经存在相同的字符串。”仅当字符串被显式保留或在类定义中用作文字时,字符串才会被保留。
以上是Java字符串池如何处理`new String('literal')`?的详细内容。更多信息请关注PHP中文网其他相关文章!