在Java中,所有您要處理的東西「幾乎」都是物件(Object),例如您之前所使用的Scanner是物件,字串(String)是物件,您之後還會看到更多的物件。 然而有些是例外,基本(Primitive)資料型態不是物件,也就是您使用int、double、boolean等宣告的變數,以及您在程式中直接寫下的字面常量。 使用Java有一段時間的人都知道,有些時候您需要將基本型態轉換為物件,例如使用Map時,要使用put()方法時需要的是物件而不是基本型態。 您要使用包裹型態(Wrapper Types)才能將基本資料型態包裝為物件,例如在 J2SE 1.4.2 之前,您要如下才能將int包裝為一個Integer物件: Integer integer = new Integer(10);
在 J2SE 5.0 之後您可以這麼寫: Integer integer = 10;
事實上編譯器在背後自動根據您寫下的陳述,為您進行自動裝箱(Autoboxing)動 作,同樣的動作可以適用於 boolean、byte、short、char、long、float、double等基本型態,分別會使用對應的包裹型態(Wrapper Types)Boolean、Byte、Short、Character、Integer、Long、Float或Double。 自動裝箱運用的方法還可以如下: int i = 10;
Integer integer = i; 您也可以使用更一般化的Number,例如: Number number = 3.14f;
3.14f會先被自動裝箱為Float,然後指定給number。 J2SE 5.0中可以自動裝箱,也可以自動拆箱(Unboxing),例如下面這樣寫是可以的: Integer fooInteger = 10;
int fooPrimitive = fooInteger; 在運算時,也可以自動裝箱與拆箱,例如: 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拆箱,再與false進行AND運算,結果會顯示false。 |