享元模式與裝箱、拆箱
阿新 • • 發佈:2021-01-20
技術標籤:設計模式
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之間的資料)