Java包裝類


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