Java中的類型分爲原始類型和對應的封裝類型(裝箱類型),基本類型包括byte字節型(一個字節)、char字符型(兩個字節)、short短整型(兩個字節)、int整型(四個字節)、long長整型(八個字節)、float浮點型(四個字節)、double 雙精度浮點型(八個字節)、boolean型(一個字節)八種類型,對應的封裝類型分別是Byte、Character、Short、Integer、Long、Float、Double、和Boolean。
基本類型和封裝類型主要存在三個方面的區別:1.基本類型只有值,而兩個封裝類型可以有相同的值和不同的同一性;2.基本類型只有功能完備的值,而封裝類型除此之外還有非功能值:null;3.基本類型比封裝類型更節省空間和時間。
Java1.5發行版本增加了自動裝箱(autoboxing)和自動拆箱(autounboxing)功能,提供了基本類型和封裝類型的相互轉換。自動裝箱實現了基本類型向封裝類型的轉換,如下面的代碼。
Integer number = 10;
實際的執行代碼是:
Integer number = new Integer(10);
對於自動拆箱,形如下代碼:
Integer number = 10; int number2 = number;
實際執行的代碼爲:
int number2 = number.intValue();當在一項操作中混合使用基本類型和封裝類型時,封裝類型就會自動拆箱。
封裝類型最好不要過度用,否則會影響性能,如下情形可以合理使用。作爲集合中的元素、鍵和值,在參數化類型中必須使用封裝類型作爲類型參數,如不能聲明ThreadLocal<int>類型,而是ThreadLocal<Integer>;在進行反射的方法調用時必須使用封裝類型。