2个Integer类型的数据值是相同,但是为什么不相等

问题的出现:

在项目中,我拿到了传过来的参数,然后跟数据库中的数据进行匹配时,竟然发现2个Integer类型的数据不相等,明明2个值是一模一样的,但是使用=时,竟然是不相等

前提知识

1)在java中,==比较的是对象引用,而equals比较的是值
2)java的自动装箱、自动拆箱
自动装箱:将基本数据类型转换为对应的包装类
自动拆箱:将包装类转换为基本数据类型
基本数据类型跟包装类对应如下
基本数据类型 包装类
byte Byte
boolean Boolean
short Short
char Character
int Integer
long Long
float Float
double Double

Integer a =1等价于 Integer a=Integer.valueOf(1)
Integer a =10,int b=a等价于Integer a =10,int b=a.intValue();

自动装箱都是通过包装类的 valueOf() 方法来实现的.
自动拆箱都是通过包装类对象的 xxxValue() 来实现的。

问题解决

通过查找资料,Integer是存在缓存机制的,如果在java6后不去设置java.lang.Integer.IntegerCache.high,默认范围区间是-128 至 +127。

在-128 至 +127范围外,自动装箱功能将Integer a=1024等价于Integer a=new Integer(1024),所以使用=会导致数据不相等,只能使用equals

参考资料:
https://hollischuang.gitee.io/tobetopjavaer/#/basics/java-basic/boxing-unboxing
https://hollischuang.gitee.io/tobetopjavaer/#/basics/java-basic/integer-cache

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值