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
