2 回答

TA貢獻1873條經驗 獲得超9個贊
您部分正確,如果表達式不是常量表達式,+
運算符將創(chuàng)建一個新String
對象。
根據 Java 語言規(guī)范第 15.18.1 節(jié),
(強調我的)
§15.18.1 字符串連接運算符
+
如果只有一個操作數表達式的類型為
String
,則在運行時對另一個操作數執(zhí)行字符串轉換(第 5.1.11 節(jié))以生成字符串。字符串連接的結果是對 String 對象的引用,該對象是兩個操作數字符串的連接。在新創(chuàng)建的字符串中,左側操作數的字符位于右側操作數的字符之前。
String 對象是新創(chuàng)建的(第 12.5 節(jié)),除非表達式是常量表達式(第 15.28 節(jié))。
通過常量表達式,它的意思是這樣的:
"a" + "b" // this will always evaluate to "ab", so it's constant.
或者
a + b
wherea
和b
被聲明final
。
有關詳細信息,請參閱第15.28 節(jié)。

TA貢獻1982條經驗 獲得超2個贊
它創(chuàng)建新字符串,因為您正在連接對象實例。
如果要使用字符串池中已經存在的字符串,則應與常量表達式連接。
在您的情況下,如果您希望 a==b 為真,則應使用實習生,如下所示:
String b= (s + "a").intern();
System.out.println(b==a);
或者您可以使用常量表達式:
String b= "s" + "a"
System.out.println(b==a);
它也打印真
添加回答
舉報