首页 >Java >java教程 >Java字符串池如何处理`new String(\'literal\')`?

Java字符串池如何处理`new String(\'literal\')`?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-03 12:11:29890浏览

How Does the Java String Pool Handle `new String(

字符串常量池:澄清误解

在 Java 中,像“abc”这样的“字符串文字”是内部存储的,这意味着对同一文字值的多个引用指向同一个值内存中的实例。这有助于优化内存使用和性能。但是,将 new 与字符串文字一起使用,例如 new String("abc"),会创建一个新的字符串对象,即使该文字已存在于字符串池中。

提出了关于字符串池的两个陈述一些混乱:

  • 语句 1:“当编译器遇到字符串文字时,它会检查池以查看是否已存在相同的字符串。”
  • 语句 2:“当您将 new 与字符串文字一起使用时,对该文字的引用仍然放入常量表(字符串文字池)中,但 JVM 在运行时创建一个新的字符串对象。 "

澄清一下,语句 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn