程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java JDK之自動裝箱和拆箱

Java JDK之自動裝箱和拆箱

編輯:關於JAVA

基本數據(Primitive)類型的自動裝箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0開始提供的功能。雖然為您打包基本數據類型提供了方便,但提供方便的同時表示隱藏了細節,建議在能夠區分基本數據類型與對象的差別時再使用。

autoboxing和unboxing

在Java中,所有要處理的東西幾乎都是對象 (Object),例如之前所使用的Scanner是對象,字符串(String)也是對象,之後還會看到更多的對象。然而基本(Primitive)數據類型不是對象,也就是您使用int、double、boolean等定義的變量,以及您在程序中直接寫下的字面常量。

在前一個小節中已經大致看到了操作對象的方便性,而使用Java有一段時間的人都知道,有時需要將基本數據類型轉換為對象。例如使用Map對象要操作put()方法時,需要傳入的參數是對象而不是基本數據類型。

要使用打包類型(Wrapper Types)才能將基本數據類型包裝為對象,前一個小節中您已經知道在J2SE 5.0之前,要使用以下語句才能將int包裝為一個Integer對象:Integer integer = new Integer(10);

在 J2SE 5.0之後提供了自動裝箱的功能,您可以直接使用以下語句來打包基本數據類型:Integer integer = 10;

在進行編譯時,編譯器再自動根據您寫下的語句,判斷是否進行自動裝箱動作。在上例中integer參考的會是Integer類的實例。同樣的動作可以適用於 boolean、byte、short、char、long、float、double等基本數據類型,分別會使用對應的打包類型(Wrapper Types)Boolean、Byte、Short、Character、Long、Float或Double。下面直接使用自動裝箱功能來改寫范例 4.4。

范例4.5 AutoBoxDemo.java

public class AutoBoxDemo {
    public static void main(String[] args) {
      Integer data1 = 10;
      Integer data2 = 20;
      // 轉為double值再除以3
      system.out.println(data1.doubleValue() / 3);
      // 進行兩個值的比較
      system.out.println(data1.compareTo(data2));
    }
}

程序看來簡潔了許多,data1與data2在運行時就是Integer的實例,可以直接進行對象操作。執行的結果如下:

3.3333333333333335

–1

自動裝箱運用的方法還可以如下:

int i = 10;

Integer integer = i;

也可以使用更一般化的java.lang.Number類來自動裝箱。例如:

Number number = 3.14f;

3.14f會先被自動裝箱為Float,然後指定給number。

從J2SE 5.0開始可以自動裝箱,也可以自動拆箱(unboxing),也就是將對象中的基本數據形態信息從對象中自動取出。例如下面這樣寫是可以的:

Integer fooInteger = 10;

int fooPrimitive = fooInteger;

fooInteger引用至自動裝箱為Integer的實例後,如果被指定給一個int類型的變量fooPrimitive,則會自動變為int類型再指定給fooPrimitive。在運算時,也可以進行自動裝箱與拆箱。例如:

Integer i = 10;
System.out.println(i + 10);
System.out.println(i++);

上例中會顯示20與10,編譯器會自動進行自動裝箱與拆箱,也就是10會先被裝箱,然後在i + 10時會先拆箱,進行加法運算;i++該行也是先拆箱再進行遞增運算。再來看一個例子:

Boolean boo = true;

System.out.println(boo && false);

同樣的boo原來是Boolean的實例,在進行AND運算時,會先將boo拆箱,再與false進行AND運算,結果會顯示false。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved