关于Integer的一个大坑
来源:互联网 发布:淘宝卖家如何备注订单 编辑:程序博客网 时间:2024/05/18 15:56
最近在业务代码中,一时偷懒,用了包装类,于是踩了一个大坑;
而话不说,先上代码:
Integer a=1;
Integer b=2;
Integer c =129;
Integer d = 129;
a=b true; c=b fales;
为什么呢?
看看源码:
/** * Cache to support the object identity semantics of autoboxing for values between * -128 and 127 (inclusive) as required by JLS. * * The cache is initialized on first usage. The size of the cache * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option. * During VM initialization, java.lang.Integer.IntegerCache.high property * may be set and saved in the private system properties in the * sun.misc.VM class. */ private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; static { // high value may be configured by property int h = 127; String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); if (integerCacheHighPropValue != null) { try { int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - (-low) -1); } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {} }
大致翻译一下上面的注释,就是Integer里面有一个内部类IntegerCache缓存,这个缓存如果数值在-128-127之间点话,是不会进行装箱动作,而之间是基本类型比较地址,所以为什么阿a=b是true 而c与d超过了这个缓存的范围,则进行装箱成一个对象,而两个不同对象之间的==对比事比较引用对象的地址,所以是false;
0 0
- 关于Integer的一个大坑
- 关于定义静态Fragment的一个大坑!!!
- ViewPropertyAnimator的一个大坑
- greendao的一个大坑
- EasyMock的一个大坑
- 日记:一个大坑,关于python的sort和sorted
- 一个关于Integer的问题
- 一个关于Integer的秘密
- 关于CTeX的几个大坑
- 一个关于单引号和null和大坑
- 用tcc遇到的一个大坑
- 与 so 有关的一个长年大坑
- 与 so 有关的一个长年大坑
- 与 .so 有关的一个长年大坑
- 与 so 有关的一个长年大坑
- cef3.xp兼容编译的一个大坑
- 与 .so 有关的一个长年大坑
- tomcat6关于el表达式的一大坑!
- 软件测试资料分享,经过认真整理的一套完整教学体系
- 2 tomcat服务器学习与使用(一)
- 常见的几种矩阵分解方式
- 给UITabbarcontroller直接add子viewcontroller
- linux中的ifconfig
- 关于Integer的一个大坑
- 我的常用代码段
- Java静态方法问题,也许无解,求高人看看有没有思路
- SQL各种连接查询详解(左连接、右连接..)
- andoird---loadermanager和contentprovider结合,加载数据
- JavaWeb实例:记录在线人员信息,管理员可以踢人
- MFC避免绘图时闪烁(OnEraseBkgnd)
- js 二维码生成
- C语言堆栈说明