Integer与int比较的坑

平常 Integer 和 int 比较 都是直接 == 的,这没有问题
但是需要注意的是当 Integer 为 null的时候 , 还是 Integer == int 的话就是报空指针了。
原因很简单,Integer和int==比较的使用,Integer会自动拆箱,调用 intValue() 方法,那null去调用方法,自然抛出空指针。
所以可以采用 Integer.valueOf(int).equals(Integer) 这样的方法来避免空指针

Integer 指的是 Integer a = 1
new Integer 指的是 Integer a = new Integer(1)

而其他需要注意的是
new Integer 和 new Integer 使用 == 永不相等 这个容易理解 内存地址不同
Integer 和 new Integer 使用 == 永不相等 也是一样 内存地址不同

但 Integer 和 Integer 则是在 -128 ~ 127 这个范围里相等 因为使用 Integer a = 1
Integer 会自动装箱 调用

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

可以看到在IntegerCache的最低和最高值之间(-128,127)它是会返回IntegerCache里建好在内存的Integer对象,所以其内存地址是一样的,出了这个范围,则帮你新建Integer对象,所以==不相等

而 int和Integer 或者 int和new Integer 都会是相等的(除了上面说的Integer为null)因为比较是Integer会自动拆箱,其实就是变成 int == int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值