Integer与int的==问题

Integer与int的==问题

先来看demo

    @Test
    public void test() {
        Integer a1 = 1000;
        Integer b1 = 1000;

        Integer a2 = 100;
        Integer b2 = 100;

        Integer a3 = new Integer(100);
        Integer b3 = new Integer(100);

        System.out.println("第一组:"+ (a1 == b1));
        System.out.println("第二组:"+ (a2 == b2));
        System.out.println("第三组:"+ (a3 == b3));
    }

结果:

第一组:false
第二组:true
第三组:false

Process finished with exit code 0

分析

==实际上比的是对象的地址
javap -c .\TestDemo.class 之后可以看到 装箱实际调用Integer的valueOf方法
在这里插入图片描述

a1==b1

比较时进行会自动转换 调用Integer的valueOf方法

    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

会先判断值在不在IntegerCache中 如果在直接返回 IntegerCache的范围[-128,127]
故不在 需要new Integer对象 地址肯定不相等 打印false
IntegerCoche

a2=b2

在IntegerCache中 故对象地址相等 打印true

a3=b3

都是重新new的Integer对象 故不相等 打印false

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值