JavaSE Integer包装类:判断相等的一二事宜

现在有一道面试题,判断三个sout输出的结果

@Test
    public void IntegerEquals() {
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j);//false

        Integer m = 1;
        Integer n = 1;
        System.out.println(m == n);//true

        Integer x=128;
        Integer y=128;
        System.out.println(x==y);//false
    }

第一个由于是在堆当中new出来的,所以i、j的地址必然是不同的,其结果一定是false。

第二个:

  Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],保存了从-128——127范围的整数。如果我们使用自动装箱 的方式,给Integer赋值的范围在-128——127范围内时,可以直接使用数组中的元素,不用再去new了。目的是提高效率。所以m,n对象的地址都指向了Integer数组里的1,当然地址就是相同的了,那么输出打印的结果也就是true啦。

第三个:

  由于cache数组的范围是-128——127之间的,所以128是不存在于这个数组当中的;Integer对象会在堆当中new一个128,x和y new出来的128的地址必然是不同的,故结果是false。

原文地址:https://www.cnblogs.com/oldfish123/p/14393405.html