zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    c语言中的数据变量类型,大小
    表达式* ptr ++和++ * ptr是否相同?
    再论i++ ++i
    Chapter 1 First Sight——2
    如何修改博客样式
    PAT1011
    Chapter 1 First Sight——1
    Preface
    L11,one good turn deserves another
    PAT1010
  • 原文地址:https://www.cnblogs.com/oldfish123/p/14393405.html
Copyright © 2011-2022 走看看