不可變類的實例的狀態(tài)不會變化,這樣的實例可以安全的被其他與之關(guān)聯(lián)的對象共享,還可以安全的被多個線程共享。 為了節(jié)省內(nèi)存空間, 優(yōu)化程序的性能, 應該盡可能的重用不可變類的實例,避免重復創(chuàng)建具有相同屬性值的不可變類的實例。
在 JDK1.5 的基本類庫中, 對一些不可變類, 如 Integer 類作了優(yōu)化, 它具有一個實例緩存,用來存放程序中經(jīng)常使用的 Integer 實例。JDK1.5 的 Integer 類新增了一個參數(shù)為 int 類型的靜態(tài)工廠方法 valueOf(int i),它的處理流程如下:
if(在實例緩存中存在取值為 i 的實例)
直接返回這個實例
else{
用 new 語句創(chuàng)建一個取值為 i 的 I nteger 實例
把這個實例存放在實例緩存中
返回這個實例
}
在以下程序代碼中,分別用 new 語句和 Integer 類的 valueOf(int i)方法來獲得 Integer 實例:
I nteger a=new I nteger(10);
I nteger b=new I nteger(10);
I nteger c=I nteger .valueOf(10);
I nteger d= I nteger .valueOf(10);
System.out.println(a==b); //打印 false
System.out.println(a==c); //打印 false
System.out.println(c==d); //打印 true
以上代碼共創(chuàng)建了三個 Integer 對象,參見圖 11-4。每個 new 語句都會創(chuàng)建一個新的Integer 對象。而 Integer .valueOf(10)方法僅僅在第一次被調(diào)用時,創(chuàng)建取值為 10 的 Integer對象,第二次被調(diào)用時,直接從實例緩存中獲得它。由此可見,在程序中用 valueOf()靜態(tài)工廠方法獲得 Integer 對象,可以提高 Integer 對象的可重用性。
更多信息請查看IT技術(shù)專欄