首先看一段代碼(使用JDK 5),如下:
輸出結果:
The Java Language Specification, 3rd Edition 寫道:
檢視jdk源碼,如下:
這兒的IntegerCache有一個靜态的Integer數組,在類加載時就将-128 到 127 的Integer對象建立了,并儲存在cache數組中,一旦程式調用valueOf 方法,如果i的值是在-128 到 127 之間就直接在cache緩存數組中去取Integer對象。
再看其它的包裝器:
Boolean:(全部緩存)
Byte:(全部緩存)
Character(<= 127緩存)
Short(-128 — 127緩存)
Long(-128 — 127緩存)
Float(沒有緩存)
Doulbe(沒有緩存)
同樣,對于垃圾回收器來說:
這裡的代碼不會有對象符合垃圾回收器的條件,這兒的i雖然被賦予null,但它之前指向的是cache中的Integer對象,而cache沒有被賦null,是以Integer(100)這個對象還是存在。
而如果i大于127或小于-128則它所指向的對象将符合垃圾回收的條件:
轉載位址: http://blog.csdn.net/xiaohai0504/article/details/6885137