程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2SE >> 體驗J2SE 1.5新特性之裝箱和拆箱(2)

體驗J2SE 1.5新特性之裝箱和拆箱(2)

編輯:J2SE

2. 使用Autoboxing和Auto-Unboxing

使用Autoboxing和Auto-Unboxing,並不需要什麼特別的步驟,一切都會在編譯器的安排下自動發生。

現在可以這樣來對待一個int型的數據:

清單3:自動完成的Boxing操作

Collection al = new ArrayList();
al.add(1);

因為編譯器會悄悄的把這段代碼轉換成接近這個樣子:

清單4:作了Autoboxing之後的等價形式

Collection al = new ArrayList();
al.add(Integer.valueOf(1));

這裡所用的能接受int類型的值為參數,生成Integer實例的valueOf方法,是J2SE 1.5中新加入的內容。其它包裹類也都有可以接受對應的基本類型的值為參數,生成對應的包裹類實例的valueOf方法加入。

而這樣對待一個Integer型的對象也是可以的:

清單5:自動完成的Unboxing操作

Integer one = new Integer(1);
int two = one + 1;

因為編譯器會悄悄的把這段代碼轉換成類似這個形狀:

清單6:作了Auto-Unboxing之後的等價形式

Integer one = new Integer(1);
int two = one.intValue() + 1;

大體上,只要把一個結果類型是基本類型的表達式,放到需要讓它們的包裹類出現的位置上,就會誘發Autoboxing;類似的,只要把一個結果類型是包裹類的表達式,放到只允許相應的基本類型出現的位置上,就會誘發Auto-Unboxing。

“Autoboxing/Auto-Unboxing”特性的來源

J2SE 1.5中增加的許多語言特性都可以在C#裡找到對應的東西。不過根據Bruce Eckel對Joshua Bloch的采訪,盡管Java的研發小組確實很關注C#(Joshua Bloch本人的案頭就放著一本關於C#的書),但是只有“Autoboxing/Auto-Unboxing”和“Metadata”確實是從C#中直接借鑒來的特性。

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