2 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
c==(a+b),三個(gè)包裝型a,b,c全部拆箱
c=Long.longValue(c);返回基本數(shù)據(jù)類型long
a和b使用Integer.intValue(a);返回的是基本數(shù)據(jù)類型int,
c==(a+b)他們之間是基本類型數(shù)值的比較,所以為true
包裝類的“==”運(yùn)算在不遇到算術(shù)運(yùn)算的情況下不會(huì)自動(dòng)拆箱
上面的c==(a+b)有+號(hào)是算術(shù)運(yùn)算符所以會(huì)自動(dòng)拆箱
如果是c==a,沒有算術(shù)運(yùn)算符不會(huì)拆箱,編譯報(bào)錯(cuò)Incompatible operand types Integer and Long

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
c=a+b是c = a.intValue() + b.intValue()的簡(jiǎn)寫,兩個(gè)int相加結(jié)果還是int,必須顯示轉(zhuǎn)換為long才可以。比如c = (long)(a+b)。c==(a+b)是對(duì)比兩個(gè)reference是不是指向同一個(gè)對(duì)象,jvm會(huì)優(yōu)化一部分整數(shù),我記得是-128到128的object。如果有兩個(gè)整數(shù)一樣,會(huì)指向同一個(gè)對(duì)象。比如Integer a = 12; Integer b=12; a==b是true。
添加回答
舉報(bào)