今天在用springboot框架开发用户管理模块 合代码的时候的时候,由于之前地实体类中id定义的是int类型, 而mybatis中自动生成的是Integer类型的,为了统一代码,都改成了Integer类型的。之前我的模块所有的数据(就是当时数据类型还是int)都测过,都没问题。
但是现在问题就出来了,值在本应该相等的地方进入相等体系中的逻辑,但却进入了不相等的逻辑流程中。
最后发现是int和Integer类型不匹配的原因。
在用两个Integer对象比较数值的话,如果是整型值的话最好调用intValue方法来得到一个int类型的值,当然也可将其转变为
float(floatValue),double(longValue)类型来比较。
public int intValue() 以 int 类型返回该 Integer 的值。
指定者:类 Number 中的 intValue返回:转换为 int 类型后该对象表示的数值。
下面以一个例子详细说明:
/**
* 测试 两个Integer类型的值相比较的问题
* 当给Integer直接赋值时,如果在-128到127之间相等的话,它们会共用一块内存,
* 而超过这个范围,则对应的Integer对象有多少个就开辟多少个
*/
public class ClassD {
public static void main(String[] args) {
// 两个new出来的Integer类型的数据比较,相当于把new出来的地址作比较
Integer a0 = new Integer(1);// 普通的堆中对象
Integer b0 = new Integer(1);
System.out.println("new出来的 " + "a0==b0 :" + (a0 == b0));
System.out.println("a0:"+a0+" b0:"+b0);
// 调用intValue方法得到其int值
System.out.println("调用intValue " + "a0.intValue() == b0.intValue() " +
(a0.intValue() == b0.intValue()));
// 把Integer类型的变量拆箱成int类型
int c = 1;
System.out.println("将Integer自动拆箱 " + "a0==c: " + (a0 == c));
// 其实也是内存地址的比较
Integer a1 = 30; // 自动装箱,如果在-128到127之间,则值存在常量池中
Integer b1 = 30;
System.out.println("直接赋值的两个Integer类型的比较 " +
"a1 == b1: "+ (a1 == b1));
Integer a3 = 128;
Integer b3 = 128;
System.out.println("直接赋值的两个Integer类型的比较 " +
"a3 == b3: " + (a3 == b3));
Integer a4 = 412;
Integer b4 = 412;
System.out.println("直接赋值的两个Integer类型的比较 " +
"a4 == b4: " + (a4 == b4));
System.out.println("调用intValue " + "a4.intValue() == b4.intValue(): "
+ (a4.intValue() == b4.intValue()));
}
}
控制台打印的结果如下图所示: