我知道如果你让JVM重用如何实现字符串子字符串?
for (condition) {
String s = "hi there";
}
只是一个String
实例在所有的迭代创建的,不像String s = new String("hi there");
,将创建在每个迭代一个新的实例。
但是,从约书亚布洛赫阅读有效的Java:第2章第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
引用)
他大概的意思是“虚拟机包含..”,而不是字符串包含另一个字符串 –
我不确定,所以一个评论,而不是一个答案。但我认为这个“包含”是部分错误的,你的例子确实产生了三个实例。 – glglgl
@glglgl实际上是我的逻辑*所说的内容,但可以使用JVM来创建's3'作为对's1' +'s2'的引用? –