我知道将此问题标记为重复/近距离投票非常诱人,但请听我说。
我试图了解字符串池如何在Java中工作。
虽然StackOverflow中有很多关于同一主题的答案,但没有一个答案似乎能够详细解释实施细节。
信息在几十个问题上是分散的,每个问题似乎都指出其他一些答案是重复的,有些答案甚至看似与其他答案相矛盾。
这个问题的目的是为后代提供一个适当的,完整的答案,而不是让它们超越这些QAs的蜘蛛网:
(此列表的目的也是为了表明我知道此论坛中有多少重复的问题)
(实际上,有太多重复的问题表明现有问题的答案不完整/不清楚/不是人们正在寻找的内容)
我的问题实际上类似于这个问题:
Is String Literal Pool a collection of references to the String Object, Or a collection of Objects
这个问题的答案很棒,但没有谈论字符串池(!)。
我感到困惑,因为这些似乎提供了有关字符串池的不同解释:
注意:
我不是在寻找能够告诉我String Pooling效果的答案。例如,我不是在寻找这样的解释:
String s1 = new String("text"); //explicitly creates a new and referentially distinct instance of a String object;
String s2 = "text"; //may reuse an instance from the string constant pool if one is available.
System.out.println(s1 == s2); // false , not refering to same object
System.out.println(s1.equals(s2)); // true
我试图理解JVM如何实现String Pool - 它使用什么数据结构,这些数据结构如何适应String池逻辑等。
PS:删除了一条符合&#34的行;请原谅我,如果我是粗鲁的"从这个问题 - 坦率地说,这与我的挫折感有关,而不是与我的问题有关,而且显然是味道不好