在项目中,我拿到了传过来的参数,然后跟数据库中的数据进行匹配时,竟然发现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