iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
自我挑戰組

轉職仔自學Java筆記本系列 第 7

包裝類別(Wrapper Class)- 以 int 與 Integer 為例

  • 分享至 

  • xImage
  •  

原始資料型別(Primitive Data Types) 有時會有需要以物件 (Object) 的特性操作的情境,所以在 Java 中提供了包裝類別(Wrapper Class),可以把原始資料型別包裝轉換為物件來使用。

以 Wrapper Class 建立實例

我很常使用的情況為需要將資料放入 Map 或 ArrayList 的時候,因為只能接收物件(Object)作為其元素,所以需要先以包裝類別 (Wrapper Class) 建立實例,舉例如下:


 // 錯誤示範: int 無法作為 ArrayList<> 內的元素
ArrayList<int> test = new ArrayList<int>(); 

// 需要使用 Integer 將 int 包裝起來(作成 Object)
ArrayList<Integer> test = new ArrayList<Integer>(); 

自動裝箱(Auto boxing)與自動拆箱(Auto unboxing)

如果要定義一個包裝類別 (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,其他皆直接把首個英文字符改成大寫即可。


上一篇
布林值 (Boolean) 與字符 (Characters)
下一篇
Java 的 String 與 StringBuffer
系列文
轉職仔自學Java筆記本22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言