閱讀744 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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 a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a == b);
false,不解釋


例三
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
true,java為了提高效率,IntegerCache類中有一個數組緩存了值從-128到127的Integer對象。如果i的值是[-128,127]時,會直接從這個緩存中返回一個對象,否則就new一個Integer對象。類比String的駐留池。
 


例四
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
false,解釋見例3


例五
Integer a = Integer.valueOf(100);
Integer b = 100;
System.out.println(a == b);
true

 

例六
Integer a = Integer.valueOf(128);
Integer b = 128;
System.out.println(a == b);
false

 


三 享元模式

享元模式(Flyweight Pattern)是一種軟件設計模式。它使用共享物件,用來盡可能減少內存使用量以及分享資訊給盡可能多的相似物件;它適合用於當大量物件隻是重複因而導致無法令人接受的使用大量內存。通常物件中的部分狀態是可以分享。常見做法是把它們放在外部數據結構,當需要使用時再將它們傳遞給享元。正如我們例三展示的。

 

參考博客
https://www.cnblogs.com/wangchenyang/archive/2012/02/01/2334760.html
https://baike.baidu.com/view/6143765.htm

 

 

最後更新:2017-04-03 20:19:47

  上一篇:go java泛型學習4之自定義泛型類(DAO)
  下一篇:go Junit中測試插入等無返回值的操作要注意的問題