Java中的自動包裝和解包
阿新 • • 發佈:2019-01-22
這裡的裝箱應該理解為 封裝物件 ,即把基礎資料型別(如 int)轉換成基礎型別封裝類的物件(如 new Integer()) 拆箱就是裝箱的反過程,即把基礎型別封裝類的物件(如 new Integer())轉換為基礎資料型別(如 int)。
例子如下: 裝箱: Integer a = new Integer() ; a = 100 ; //1.5以前不支援為物件如此賦值 拆箱: int b = new Integer(100) ; 自動拆裝箱 是JDK1.5中新增加的內容 ,它可以將基本資料型別自動轉換為它的包裝類。或者相反。 基本資料型別與包裝類對應關係如下: short Short int Integer long Long char Char float Float double Double boolean Boolean
注意的問題:
眾所周知java對原始資料型別如int、char、long等基本資料型別有自動打包成相應的複合型別Integer、Character、Long等的機制;也可以將複合型別自動轉換為原始型別。
這取決於程式要進行怎樣的處理。如:
int i = 0;
Integer obj = i;
-----
Integer obj = new Integer(0);
int i = obj;
但是並不是所有的地方都會進行自動的打包和解包。有些地方存在“陷阱”,不注意的話,會產生問題。如:
java.util包中的List介面有兩個remove方法,一個接收int引數,表示刪除指定位置的元素;一個接收Object引數,表示刪除指定的元素(內部使用equals進行元素相等的判斷)。
如果有一個List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
如果你呼叫list.remove(0);表示刪除的是位置0上的元素即1。
如果你呼叫list.remove(new Integer(0));表示刪除要0這個元素,但是list中沒有這個元素,因此list元素不會發生變化。