Integer及int之间的比较

面试期间问了Integer和int之间各种情况的比较,发现有不确定的,然后试验了所有情况,整理如下代码,如有问题请指出。

public static void main(String[] args) {
        Integer a = 1;//默认调用valueOf 装箱 会使用缓存
        Integer b = 1;
        Integer c = new Integer(1);
        Integer d = new Integer(1);
        Integer e = Integer.parseInt("1");//parseInt返回的是int类型,赋值给Integer后会装箱
        Integer f = Integer.parseInt("1");
        int g = 1;
        int h = 1;

        //equals方法都是进行拆箱,所以都是值比较
        //int和Integer比较都会将Integer拆箱,拆箱后比较值
        //超出-128~127的结果会改变的加**********
        System.out.println(a == b);// true 都为缓存中的一个对象   **********
        System.out.println(c == d);// false 两个对象
        System.out.println(e == f);// true 都是int的装箱,e、f指向的都是缓存中的地址  **********
        System.out.println(g == h);// true 值相等
        System.out.println(a == c);// false a为缓存中的对象,c为新对象
        System.out.println(a == e);// true e的后边返回int,a 和 e 后面的值都做了装箱,都为缓存地址 **********
        System.out.println(a == g);// true a拆箱
        System.out.println(c == e);// false e的后面返回int,然后调用valueOf装箱,为缓存中的地址,c为新地址
        System.out.println(c == g);// true c拆箱
        System.out.println(e == g);// true e拆箱
    }

拆箱可能会导致空指针,代码如下:

        //拆箱可以导致空指针
        Integer i = (Integer)null;
        int ii = 1;
        System.out.println(i == ii );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值