1. 程式人生 > >Java中的自動包裝和解包

Java中的自動包裝和解包

這裡的裝箱應該理解為 封裝物件 ,即把基礎資料型別(如 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元素不會發生變化。