1. 程式人生 > >Java核心(四):Java中的裝箱和拆箱

Java核心(四):Java中的裝箱和拆箱

https 語言 log .cn 實現 技術 沒有 object 面向

一、為什麽需要裝箱和拆箱?

  基礎數據類型是數據,不是對象,也不是Object的子類。Java為每種基本數據類型都提供了對應的包裝器類型。裝箱就是自動將基本數據類型轉換為包裝器類型;拆箱就是自動將包裝器類型轉換為基本數據類型。

  把一個基本類型包裝成對應的包裝器類對象,有以下三點好處:

  1. 一是包裝器類對象具有很多可以調用的方法;
  2. 二是Java向面像對象語言的靠近。其實Java還不算是很純的面向對象的語言。真正的面向對象,是沒有基本數據類型的。它只有一種類型,就是對象;
  3. 三是在泛型中,基本類型是不可以做泛型參數的。如:List <int> list = new ArrayList<int> ();這是不合法的。你只能這個樣寫List<Integer> list = new ArrayList<Integer> ();也就是要用int型的包裝類類型來解決基本類型不可以做泛型參數的問題 。

  八種基本數據類型,對應的包裝器類型如下圖:

  技術分享圖片

    

二、什麽是自動裝箱、自動拆箱?

  基本數據類型的自動裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開始提供的功能。

1、自動裝箱

  當我們創建一個Integer對象時,可以這樣:

Integer obj = 100; //實際上,系統執行了Integer obj = Integer.valueOf(100);

  實際上,執行上面那句代碼的時候,系統為我們執行了:Integer obj = Integer.valueOf(100); 這就是基本數據類型的自動裝箱功能。

2、自動拆箱

  自動拆箱(unboxing),也就是將對象中的基本數據從包裝器對象中自動取出。如下可實現自動拆箱:

Integer obj = 10;   //裝箱,實際上執行了 Integer obj = Integer.valueOf(10);
int num = obj;       //拆箱,實際上執行了 int num = obj.intValue();    

三、推薦閱讀

  裝箱和拆箱實現的原理?面試中裝箱和拆箱的問題?推薦閱讀以下博客:

  • 深入剖析Java中的裝箱和拆箱

Java核心(四):Java中的裝箱和拆箱