当前位置: 代码迷 >> J2SE >> 为何(Integer)1==(Integer)1, (Integer)222!=(Integer)222
  详细解决方案

为何(Integer)1==(Integer)1, (Integer)222!=(Integer)222

热度:504   发布时间:2016-04-23 19:51:29.0
为什么(Integer)1==(Integer)1, (Integer)222!=(Integer)222.
如题。。。。。。。。。。。。。。。。。。。
------解决思路----------------------
Integer源码
static final Integer[] cache = new Integer[-(-128) + 127 + 1];
static {
for (int i = 0; i < cache.length; i++) {
cache[i] = new Integer(i - 128);
}
}

从上面代码可以看出,系统把-128~127之间的整数自动装箱成Integer实例,并放入一个名为cache的数组缓存起来。==比较的是地址,222不在常量池范围内,所以在自动装箱过程中需new 222,所以地址不一样。建议比较对象值最好用equal()方法。
------解决思路----------------------
那是因为你启动参数没加  -XX:AutoBoxCacheMax=10086
  相关解决方案