第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

'+' 是否在堆中創(chuàng)建新對象?

'+' 是否在堆中創(chuàng)建新對象?

梵蒂岡之花 2021-07-12 12:09:10
當我運行此代碼時String a="sa";String s = "s";String b=s + "a";System.out.println(b==a);它打印錯誤。如何?ba 是新的 String 對象嗎?
查看完整描述

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

whereab被聲明final。

有關詳細信息,請參閱第15.28 節(jié)。


查看完整回答
反對 回復 2021-07-14
?
臨摹微笑

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);

它也打印真


查看完整回答
反對 回復 2021-07-14
  • 2 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號