我知道如果你讓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'的引用? –