java开发中两个Integer类型的值相比较的问题

今天在用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()));
    }
}

控制台打印的结果如下图所示:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据知道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值