1. 程式人生 > >java 基本型別與包裝類的==和equels問題

java 基本型別與包裝類的==和equels問題

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()不影響。