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,希望我的解釋對您有用
添加回答
舉報
0/150
提交
取消
