为什么(Integer)1==(Integer)1, (Integer)222!=(Integer)222.

sunxw210 2015-04-30 12:35:47
如题。。。。。。。。。。。。。。。。。。。
...全文
181 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
alan19931103 2015-04-30
  • 打赏
  • 举报
回复
楼上正解。integer的equal是重写过的。
kiyoki 2015-04-30
  • 打赏
  • 举报
回复
那是因为你启动参数没加 -XX:AutoBoxCacheMax=10086
傻傻de点点 2015-04-30
  • 打赏
  • 举报
回复
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()方法。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧