JVM 如何重用滞留的字符串子字符串?
2022-09-02 13:21:25
我知道如果你做
for (condition) {
String s = "hi there";
}
在所有迭代中只创建一个实例,这与每次迭代中创建新实例不同。String
String s = new String("hi there");
但是,阅读Joshua Bloch的《Effective Java: Chapter 2 Item 5》(第20页),它指出:
此外,可以保证该对象将被在同一虚拟机中运行的任何其他代码重用,这些代码恰好包含相同的字符串文本 [JLS, 3.10.5]。
AFAIK没有说碰巧是相同的字符串文字,它说包含。
阅读[JLS,3.10.5]找不到任何确切的参考,我对此有疑问。
给出这个片段:
String s1 = "hi ";
String s2 = "there";
String s3 = "hi there";
创建了多少个实例?
- 3个实例(因此,短语并不真正精确)。
- 2 个实例,并且(然后创建重用和引用)
s1
s2
s3
s1
s2