除了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
摘自:《码出高效》源码