128陷阱

举例说明
Integer num1 =100;
​ Integer num2 =100;
​ System.out.println(num1num2);
​ Integer num3 =200;
​ Integer num4 =200;
​ System.out.println(num3
num4);
输出:true false
原因:因为自动装箱,会执行:
Integer num2 =Integer.valueOf(100);
valueOf里边有一段代码为:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
查看low里边的代码:
static final int low = -128;
static final int high;
static final Integer cache[];
low为-128;
由此可知cache数组里存的是-128 ~ 127,因此,当num1=num2=100时,返回的是100的存放地址,是一样的,返回true;而当num3=num4=200时,最大127,超出了范围,会执行return new Integer(i);这一行代码,开辟新的空间,因此指向地址是不一样的,返回false。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值