1.ValueOf和強轉的區別? Case1: 需要強調的是String.valueOf()方法,當參數為類型是object,且值時null的時候他的處理方式 Case2: 基本包裝類型(Long,Integer等)的valueOf(Object)的處理和String不一樣,Object是null就 ...
1.ValueOf和強轉的區別?
Case1: 需要強調的是String.valueOf()方法,當參數為類型是object,且值時null的時候他的處理方式
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); // 如果object為null會得到字元串’null’,程式不報錯但邏輯出錯,所以這時要使用強轉 }
Case2: 基本包裝類型(Long,Integer等)的valueOf(Object)的處理和String不一樣,Object是null就返回null而不是’null’
總結:遇到Object轉String 儘量強轉
遇到Object轉基本包裝類型時,最好強轉.如果需要可以使用instanceOf判斷是否屬於改類型.
2.包裝類型的拆裝箱
裝箱:基本類型轉換成包裝類型.拆箱:包裝類型轉換成基本類型
在裝箱的時候自動調用的是Integer的valueOf(int)方法。而在拆箱的時候自動調用的是Integer的intValue方法,其他的包裝類類似
3.包裝類型的==判斷
1.首先創建將包裝類型時會調用valueOf()方法.
例如 Integer i = 100; 等價於Integer.valueOf(i);
★要知到Integer包裝類中有一個IntegerCache靜態類,虛擬機載入這個Integer對象就會將[-128,127]的值存儲在Integer cache[]中
2,valueOf方法先判斷int值是否在IntegerCache緩存中,如果在則返回緩存池的數據,如果不在則返回Integer對象
所以 Integer x = 200; Integer y = 200; y == x 為false;
特殊情況
1.Int x = 100; Integer y = 100 ; x == y 為true
原因 == 只能用在數值類型判斷或者對象類型判斷
數值判斷,判斷值是否相等.對象判斷,判斷地址是否一致.
如果是一個數值,一個數值包裝類型,則會對包裝類進行拆箱,在進行值判斷.
2.如果包裝類型進行equals進行比較時,他會先進行類型判斷,如果類型不一致直接返回false,不會繼續內容判斷
Integer x = 100; Short s = 100; x.equlas(s); 值為false
資料來源於網路,如有侵權聯繫刪除(^^ゞ!