栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

2个Integer类型的数据为什么不能比较是否相同了

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1036345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号