Integer类型比较大小出错

探讨Java中Integer对象在特定范围内(-128至127)使用缓存,以及超出此范围时对象比较的误区。通过源码解析,理解Integer对象比较为何会返回错误结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为Integer类型最多可以比价127/-128之间的数,所以需要换方法或者进行转换(127可以比较)

Integer i = 128;
Integer j = 128;
Integer x = 126;
Integer y = 126;
System.out.println(i == j);
System.out.println(x == y);
System.out.println(i.equals(j));
System.out.println(x.equals(y));
System.out.println(i.intValue() == j.intValue());
System.out.println(x.intValue() == y.intValue())

 

注:后面是最近补充的

    最近喜欢看java源码,看到Integer又想起之前写的这个,我们可以来看看为什么==比较大小会出错

    首先就是,==号比较的是指针指向的地址以及数据是否相同,也就是说==号如果比较两个地址不相同的数据的话,就会返回false,我们可以看看它的源码,当我们new一个新的Integer的时候,后台会先进入valueOf这个方法进行判断,当这个值大于等于最小值并且小于等于最大值的时候,后台会在常量池中查找是否有,如果有就直接返回,如果没有那么就会新建一个然后返回

    

    

    当值不满足这两个条件的时候,也就是当值小于low:-128 或者 值大于 high:127的时候(high可以从上面那张图发现最大值为127),会直接new一个新的对象并且返回,那么两个128比较就相当于new了两次,也就是说它的地址是完全发生了改变,所以会返回false

    

    我们可以看看如果Integer大于128的时候返回的地址是什么,相不相同

    

    

    可以看到,当两个常量为128的时候地址是不一样的,而当两个常量为127的时候地址是相同的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值