除了Float 和 Double 外,其餘包裝數據類型都會緩存 -128 ~127 的值,對於 Integer var = ? 在 -127~128 之間的賦值,Integer 對像由IntegerCache.cache 產生,會複用已有對像,這個區間內的Integer 值能夠直接使用 == 判斷,可是這個區間外的全部數據都會在堆上產生,並不會複用已有對像。java
源碼:緩存
public static Integer valueOf(int var0) { return var0 >= -128 && var0 <= Integer.IntegerCache.high ? Integer.IntegerCache.cache[var0 + 128] : new Integer(var0); }
在JDK9直接把new的構造方法過期,推薦使用valueOf ,利用緩存提高性能。性能
Integer 是惟一可修改緩存範圍的包裝類,在vm options 加入參數 -XX:autoBoxCacheMax=7777,便可設置最大緩存值爲7777。code
摘自:《碼出高效》源碼