原始資料型別(Primitive Data Types) 有時會有需要以物件 (Object) 的特性操作的情境,所以在 Java 中提供了包裝類別(Wrapper Class),可以把原始資料型別包裝轉換為物件來使用。
我很常使用的情況為需要將資料放入 Map 或 ArrayList 的時候,因為只能接收物件(Object)作為其元素,所以需要先以包裝類別 (Wrapper Class) 建立實例,舉例如下:
// 錯誤示範: int 無法作為 ArrayList<> 內的元素
ArrayList<int> test = new ArrayList<int>();
// 需要使用 Integer 將 int 包裝起來(作成 Object)
ArrayList<Integer> test = new ArrayList<Integer>();
如果要定義一個包裝類別 (Wrapper Class) 一般來說需要用到 valueOf( ),但也可以透過自動裝箱(Auto boxing)的功能直接指派。
Integer i = Integer.valueOf(100);
// Auto boxing 實際上內建執行了 valueOf() 將 int 轉為 Integer
Integer i = 100;
如果需要取出物件中原始資料型別的數值,可以直接指派給原始資料型別的變數,此功能為自動拆箱(Auto unboxing)
// 承上
// Auto unboxing 實際上執行了 intValue() 將 Integer 轉為 int
int number = i;
System.out.println(number);
// Out: 100
透過 Wrapper Class 建立成物件之後,就不能再用 ==
比較兩個物件內容值是否相同,需要使用 equals( )
或像是 compareTo( )
等函式作比較。
Integer a = 100;
Integer b = 100;
System.out.println(a.equals(b));
// Out: true
System.out.println(a.compareTo(b)); // 小於回傳 -1, 大於回傳 1, 等於回傳 0
// Out: 0
所有原始資料型別都有對應的 Wrapper Class,詳如下表:
Primitive Data Types | Wrapper Class |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
除了 int 為 Integer 與 char 為 Character,其他皆直接把首個英文字符改成大寫即可。