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 );

猜你喜欢

转载自blog.csdn.net/jkdcoach/article/details/80711771