java 基本型別與包裝類的==和equels問題
阿新 • • 發佈:2019-01-27
Integer i = 42;
Long l = 42l;
Double d = 42.0;
下面為true的是
(i == l)=》false
(i == d)=》false
(l == d)=》false
i.equals(d)=》false
d.equals(l)=》false
i.equals(l)=》false
l.equals(42L)=》true
0,基本型比較,低精度向高精度自動補齊在進行比較。
1、基本型和基本型封裝型進行“==”運算子的比較,基本型封裝型將會自動拆箱變為基本型後再進行比較,因此Integer(0)會自動拆箱為int型別再進行比較,顯然返回true;
2、兩個Integer型別進行“==”比較,如果其值在-128至127,那麼返回true。其他兩種包裝類進行比較,返回false, 這跟Integer.valueOf()的緩衝物件有關,這裡不進行贅述。兩個引用比較其地址。
3、兩個基本型的封裝型進行equals()比較,首先equals()會比較型別,不同false;如果型別相同,則繼續比較值,如果值也相同,返回true
4、基本型封裝型別呼叫equals(),但是引數是基本型別,這時候,先會進行自動裝箱,基本型轉換為其封裝型別,再進行3中的比較。
如果有Integer i=new Integer(4);
那麼 i代表的是一個地址,在==中是以地址出現,所以一般為false。equels()不影響。