Java中的裝箱與拆箱,是指將基本數據類型轉換為對應包裝類類型的過程。實際上,這一過程在編譯器中會自動完成,但是在進行一些操作時,還是要進行手動的裝箱和拆箱。
下面我們來看看裝箱和拆箱對內存的影響。裝箱后,一個基本數據類型所占用的內存空間會變為4字節,因為它變成了一個對象,即對應包裝類的一個實例。當然,在對Integer等包裝類進行賦值操作時,這些包裝類也會占用一定的堆內存空間。
int i = 1;
Integer j = i;
//等價于 Integer j = Integer.valueOf(i);
在上述代碼中,由于將基本數據類型int賦值給了Integer對象,所以會發生裝箱的過程。而即使是將一個小整數1進行賦值,它也會占用堆內存,因為它也是一個對象。
而在拆箱過程中,一個包裝類實例將會變成基本數據類型,其所占用的內存空間也會由此變小。例如,將一個Integer類型的對象賦值給一個int類型變量,就會發生拆箱過程。
Integer i = new Integer(10);
int j = i;
//等價于 int j = i.intValue();
由于拆箱不會生成新的對象,所以相對于裝箱來說,它沒有很大的影響。但如果頻繁進行裝箱和拆箱操作,會增加創建和銷毀對象的負擔,對內存空間的使用也會產生影響。因此,在一些需要性能優化的場合,應盡量避免裝箱和拆箱過程的出現。