gpt4 book ai didi

java - 为什么池中存在两个具有相同数据的文字

转载 作者:行者123 更新时间:2023-12-04 05:04:20 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How String Literal Pool Works

(2 个回答)


8年前关闭。




public class ConcatenationRuntime {
public static void main(String[] args) {
String s1 = "jim";
String s3 = "j";
String im = "im";
s3=s3+= im;
System.out.println("s3> " +s3); // jim
System.out.println(s1==s3); // line 8
System.out.println("Hel" + "lo" == "Hello"); // true
}
}

为什么在第 8 行打印 false? 这些都是文字,两个引用应该指向池中的同一个文字 - 我有点困惑。

最佳答案

Why it is returning false at line 8,



因为 s3=s3+= im; . Strings在运行时通过连接计算是新创建的 objects在堆上有自己的引用。此 referencejim 提供的引用不同保存在 StringPool .因此 s1==s3提供虚假。
但是如果你实习字符串 s3然后检查相等性它给出真。例如:
s3.intern() == s1 => 返回真

为什么?
因为实习了 String对象首先检查给定的字符串文字是否存在于 StringPool 中与否。如果 String文字存在于 StringPool它返回对该字符串文字的引用,否则它将该字符串文字的副本存储在 StringPool 中并返回对它的引用。自 jim已经存储在 StringPool 中,因此 s3.intern() 将简单地返回对 jim 的引用存储在字符串池中。因此我们得到相同的引用。这使得 s3.intern() == s1返回真。

关于java - 为什么池中存在两个具有相同数据的文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15719446/

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