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。

  • 相关阅读:
    怎样改动、扩展并重写Magento代码
    解决Gradle minifyEnabled无法找到错误
    使用Hadoop的MapReduce与HDFS处理数据
    cmake 学习笔记(一)
    简单的日志系统
    WebStorm 7.0 注冊码
    DOS命令大全--具体解释
    SQL SERVER之数据查询
    闰年的定义
    Javascript作用域链
  • 原文地址:https://www.cnblogs.com/oldfish123/p/14393405.html
Copyright © 2011-2022 走看看