亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

關于自動拆箱跟自動裝箱的問題求解

關于自動拆箱跟自動裝箱的問題求解

qq_遁去的一_1 2018-07-17 11:14:43
求解答案為什么是這些
查看完整描述

1 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

這是Integer和Long的equals方法的源碼:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
這樣就可以很清楚解釋以上現象啦~
首先是倒數第四行,abc全部是是Integer,所以b+c的結果是Integer對象,自然返回Ture;
至于倒數第二行和倒數第一行則是因為a+b的結果是Integer,所以為直接返回False;計算a+h的過程中發生了類型提升,結果為Long,所以就調
用了longValue(),自然為True;
第一行和第三行以及倒數第三行均可以用緩存解釋~
至于第二行則是==與equals方法的區別,首先a==b比較的并不是ab代表的內容,而是其內存地址,即引用對象是否是同一個;
c,d均來源與緩存區,自然地址一樣(不是數字一樣);而e和f則來自堆棧,相當于new出來的,自然地址不一樣啦。
ok,希望我的解釋對您有用

查看完整回答
反對 回復 2018-08-10
  • 1 回答
  • 0 關注
  • 638 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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