1. 程式人生 > 其它 >享元模式與裝箱、拆箱

享元模式與裝箱、拆箱

技術標籤:設計模式

demo

如下,程式碼:

		Integer i1=56;
        Integer i2=56;
        Integer i3=129;
        Integer i4=129;

        System.out.println(i1==i2);
        System.out.println(i3==i4);

第一個返回true,第二個返回false

當用valueOf來建立Integer物件的時候,因為Integer用到了享元模式來複用物件,才導致了這樣的執行結果。當我們通過自動裝箱,也就是呼叫了valueOf來建立Integer物件的時候,如果要建立Integer物件的值在-128到127之間,會從IntegerCache類中直接返回,否則才呼叫new方法建立

在IntegerCache的程式碼實現中,當這個類被載入的時候,快取的享元物件會被集中一次性建立好所有的整型值,這樣即佔用太多記憶體,也使得載入IntegerCache類的時間過長。所有,我們只能選擇快取對於大部分應用來說最常用的整型值,也就是一個位元組的大小(-128到127之間的資料)