java中的包裝類提供了將原始資料型別轉換為物件,以及將物件轉換為原始資料型別的機制。
自J2SE 5.0以來,自動裝箱和取消裝箱功能將原始物件和物件自動轉換為原始資料型別。將原始資料型別自動轉換為物件稱為自動裝箱,反之亦然。
java.lang
包的八個類在java中稱為包裝類。八個包裝類的列表如下:
基本型別 | 包裝類 |
---|---|
boolean | Boolean |
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
為什麼需要包裝類?
將原始型別和包裝類分開以保持簡單是一個明智的做法。當需要一個適合像物件導向程式設計的型別時就需要包裝類。當希望資料型別變得簡單時就使用原始型別。
原始型別不能為null
,但包裝類可以為null
。包裝類可用於實現多型性。
下面是一個簡單的程式,顯示了java中包裝類的不同方面應用。
import java.util.ArrayList;
import java.util.List;
public class WrapperClasses {
private static void doSomething(Object obj){
}
public static void main(String args[]){
int i = 10;
char c = 'a';
// 原始資料很容易使用
int j = i+3;
// 由包裝類實現的多型性,不能在這裡傳遞原始資料
doSomething(new Character(c));
List<Integer> list = new ArrayList<Integer>();
// 包裝類可以在集合中使用
Integer in = new Integer(i);
list.add(in);
// 自動裝箱負責原始到包裝器類的轉換
list.add(j);
//包裝類可以為 null
in = null;
}
}
包裝類範例:原始型別到包裝型別
public class WrapperExample1 {
public static void main(String args[]) {
// Converting int into Integer
int a = 20;
Integer i = Integer.valueOf(a);// converting int into Integer
Integer j = a;// autoboxing, now compiler will write Integer.valueOf(a)
// internally
System.out.println(a + " " + i + " " + j);
}
}
輸出結果 -
20 20 20
包裝類範例:包裝型別到原始型別
public class WrapperExample2 {
public static void main(String args[]) {
// Converting Integer to int
Integer a = new Integer(3);
int i = a.intValue();// converting Integer to int
int j = a;// unboxing, now compiler will write a.intValue() internally
System.out.println(a + " " + i + " " + j);
}
}
輸出結果 -
3 3 3