2006年12月10日 星期日

型態與物件 III 包裝類別

包裝類別 (Wrapper 類別) 也是一種和許多基本型態對應的物件,如 int 資料型態,對應了一種 java.lang.Integer 類別,我們可以用 Integer 宣告一個參考名稱為 v 的物件。
int i = 3;
Integer v = new Integer(3);
int v2 = v.intValue();
byte b = v.byteValue();
System.out.println(v2);
System.out.println(b);
//兩個都可以正確輸出 3
而 Integer 物件的方法 .intVlaue(),則是將物件傳回來那種基本型態,如 v 這個物件,以 int 型態傳回來它的資料。

自動裝箱
先前的範例,將 v 設為物件,而 v2 是一個數字,在早期 JDK 版本, v2 是不能直接 = 物件 v 的,不過新的 JDK 5.0 支援了自動幫忙做 v2 = v.intValue() 這個動作,所以 v2 = v 編譯會成功!
int v2 = v
//在 JDK 5.0 以後有自動 unboxing

Integer i = 100;
Integer i2 = 100;
System.out.println( i == i2 );
//兩個物件用 == 比較參考值為 true,表示參考值相同
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3==i4);
//兩個物件 == 比較值超過裝箱重複範圍
自動裝箱的現象只發生在數字為 -128~127 之間 (byte 的範圍)。不過還是要注意只有 JDK 5.0 開始才支援 int v2 = v 這動作;原來是 v2 = v2.intValue() 。

沒有留言: