Java记录 -76- Integer cache缓存
来源:互联网 发布:什么绝症治不好 知乎 编辑:程序博客网 时间:2024/05/29 03:50
Integer cache缓存
下面有一个简单的关于Integer的实例,但出乎预料的是其输出结果:
public class IntegerTest2 { public static void main(String[] args){ Integer i1 = 100; Integer i2 = 100; System.out.println(i1 == i2); Integer i3 = 200; Integer i4 = 200; System.out.println(i3 == i4); }}
上面的实例输出结果为:true 和 false
这是为什么呢?有点不可思议 ...
下面我们通过查看Integer的源代码来分析一下(像这种问题也只能通过源代码来查看分析其原因);
看Integer的valueOf方法,该方法是将int的转变为Integer,但当int值大于-128并小于127时,其必须缓存 must cache,并返回的是IntegerCache的cache数组中的值;
我们在看IntegerCache,该类是Integer的一个内部类,它定义了一个静态的Integer类型的数组,并在静态块中将其循环初始化值;
也就是说,我们利用Integer获得的大于-128并小于127的对象是,返回的都是缓存起来的对象,并没有新生成对象。
public static Integer valueOf(int i) { final int offset = 128; if (i >= -128 && i <= 127) { // must cache return IntegerCache.cache[i + offset]; } return new Integer(i); } private static class IntegerCache { private IntegerCache(){} static final Integer cache[] = new Integer[-(-128) + 127 + 1]; static { for(int i = 0; i < cache.length; i++) cache[i] = new Integer(i - 128); } }
JDK的API文档提示:
public static Integer valueOf(int i)
如果不需要新的 Integer 实例,则通常应优先使用该方法,而不是构造方法 Integer(int)
,因为该方法有可能通过缓存经常请求的值而显著提高空间和时间性能。
阅读全文
0 0
- Java记录 -76- Integer cache缓存
- Integer类中的缓存Cache
- Java JDK Integer Cache
- Java Integer Cache
- Java 中Integer的cache
- Java Integer 缓存问题
- Java Integer 缓存问题
- Java的Integer缓存
- java Integer类的缓存
- Java Integer类的缓存
- Java Integer的缓存策略
- java Integer类的缓存
- java Integer初始化缓存设计
- java Integer类的缓存
- Java中Integer类缓存
- Java Integer的缓存策略
- Java之Integer内部缓存
- Java Integer的缓存问题
- EasyDSS流媒体解决方案之接口汇总
- ZooKeeper安装部署
- ZooKeeper客户端连接数过多
- Linux重定向命令
- Java记录 -75- 泛型高级晋级
- Java记录 -76- Integer cache缓存
- Java记录 -77- 增强的for循环与自动拆装箱
- Java记录 -78- 可变参数
- Java记录 -79- 枚举(Enums)
- 学习c++(c+primer第五版第六章)
- Java记录 -80- 深入理解枚举(Enums)
- Java记录 -81- EnumSet和EnumMap
- shell统计日志信息
- linux shell变量获取执行结果