1. 程式人生 > >自動裝箱、自動拆箱、包裝類的快取

自動裝箱、自動拆箱、包裝類的快取

自動裝箱和自動拆箱

自動裝箱和自動拆箱就是將基本資料型別和包裝類之間進行自動的互相轉換。JDK1.5後,Java引入了自動裝箱(autoboxing)/拆箱(unboxing)。

自動裝箱

基本型別的資料處於需要物件的環境中,會自動轉換成“物件”。
以Integer為例,在JDK1.5之前,這樣的程式碼Integer i = 5;是錯誤的,必須通過Integer i = new Integer(5);這樣的語句來實現基本資料型別轉換成包裝類的過程;而在JDK1.5之後,Java提供了自動裝箱的功能,因此只需要Integer i = 5;這樣的語句就能實現基本資料型別轉換成包裝類,這是因為JVM為我們執行了Integer i = Integer.valueOf(5);這樣的操作。

自動拆箱

每當需要一個值時,物件會自動轉換成基本資料型別,沒必要顯式呼叫intValue()等轉型方法。

包裝類的快取問題

整型、char型別所對應的包裝類,在自動裝箱時,對於-128~127之間的值會進行快取處理,其目的是提高效率。
快取的原理為:如果資料在[-128,127],那麼在類載入時就已經為該區間的每個數值建立了物件,並將這256個物件存放到一個名為cache陣列中。每當自動裝箱過程發生時(或者手動呼叫valueOf()方法),就會先判斷資料是否在區間內,如果在則直接獲取陣列中對應的包裝類物件的引用,如果不在區間內,則會通過new呼叫包裝類的構造方法來建立物件。