gpt4 book ai didi

java - 关于字符串常量池

转载 作者:行者123 更新时间:2023-12-02 12:02:15 24 4
gpt4 key购买 nike

假设我有 2 个字符串 a="ABC"b="ABC" 并且我相信只会创建一个字符串,并且这两个字符串都会被创建引用将指向字符串常量池中的实例。既然如此,为什么我们需要 .equals() 方法来比较。请澄清。

最佳答案

I believe there will be only one string will be created and both these string references will point to the instance in the String Constant Pool.

关闭。 “常量池”实际上指的是类文件表示中的一个部分,它包含字符串以外的其他内容。

根据 Java 规范,运行时保存“ABC”字符串对象的位置没有名称。 Javadoc 只是将其称为“字符串池”,而 JLS 根本没有明确提及它。此外,此池还可能包含由应用程序代码在运行时调用 String::intern 创建的字符串。

Why do we need .equals() method to compare?

因为大多数字符串对象不是通过调用String::intern创建的。

只有由类加载器(因为它们代表源代码中的文字)或调用 String::intern 的应用程序代码驻留的字符串对象才会位于池中。

如果您不知道(确定)您正在比较的两个字符串已被保留,那么您无法确定 == 会给出正确的答案。因此,测试两个字符串是否相等的安全方法是使用 String::equals

<小时/>

(脚注:G1 垃圾收集器还可以执行称为“字符串重复数据删除”的操作(请参阅 JEP 192 ),但这是与实习不同的过程,并且不会改变身份字符串对象的。因此它与这个问题无关。)

关于java - 关于字符串常量池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47157723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com