天天看點

jdk1.5新特性4之自動裝箱和自動拆箱與享元模式

一 基本概念

1 裝箱

把基本類型用它們相應的引用類型包裝起來,使其具有對象的性質。如int——>integer,float——>float。

自動裝箱

integer a = 100,編譯器調用的是static integer valueof(int i)

2 拆箱

和裝箱相反,将引用類型的對象簡化成值類型的資料

自動拆箱

int b = new integer(100);

int c = a +2;

二 是否相等

例一

integer a = new integer(100);

integer b = 100;

system.out.println(a == b);

false,很好了解,b的值在編譯時就确定下來了,而a是配置設定一塊堆給它,位址當然不等

例二

integer b = new integer(100);

false,不解釋

例三

integer a = 100;

true,java為了提高效率,integercache類中有一個數組緩存了值從-128到127的integer對象。如果i的值是[-128,127]時,會直接從這個緩存中傳回一個對象,否則就new一個integer對象。類比string的駐留池。 

例四

integer a = 128;

integer b = 128;

false,解釋見例3

例五

integer a = integer.valueof(100);

true

例六

integer a = integer.valueof(128);

false

三 享元模式

享元模式(flyweight pattern)是一種軟體設計模式。它使用共享物件,用來盡可能減少記憶體使用量以及分享資訊給盡可能多的相似物件;它适合用于當大量物件隻是重複因而導緻無法令人接受的使用大量記憶體。通常物件中的部分狀态是可以分享。常見做法是把它們放在外部資料結構,當需要使用時再将它們傳遞給享元。正如我們例三展示的。

參考部落格

<a href="http://www.cnblogs.com/wangchenyang/archive/2012/02/01/2334760.html">http://www.cnblogs.com/wangchenyang/archive/2012/02/01/2334760.html</a>

<a href="http://baike.baidu.com/view/6143765.htm">http://baike.baidu.com/view/6143765.htm</a>