Integer使用==和equals比较的区别

Integer是一个包装类,可以自动拆箱,只能实例化后使用默认值为null,取值范围在-128-127之间

今天遇到一个问题就是Integer在大于127之后的变化

        Integer param1 = 200;
        Integer param2 = 200;
        if (param2==param1){
            System.out.println("相等");
        }else {
            System.out.println("不相等");
        }

控制台返回的是不相等。然后我又换了两个小于127的打印了一下

        Integer param1 = 10;
        Integer param2 = 10;
        if (param2==param1){
            System.out.println("相等");
        }else {
            System.out.println("不相等");
        }

控制台返回的是相等。

经过查询相关源码和资料得出了结论Integer对象赋值在-128-127这个区间时,缓存会为我们保存这个变量,而超出了这个值就会在堆中产生一个新的对象,本身Integer就是一个对象,所以控制台就会打印出不相等的现象,官方也给出了对应的解释,小的数据适应频率会提高,同时缓存下来,为了优化所以采取这个方案。

所以当遇见Integer两个值进行比较的时候==可能会导致程序执行结果有问题,采取equal方法进行比较

 Integer param1 = 200;
        Integer param2 = 200;
        if (param2.equals(param1)){
            System.out.println("相等");
        }else {
            System.out.println("不相等");
        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值