• 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。

  • 相关阅读:
    Elasticsearch集群+kibana
    kafka集群搭建
    Zookeeper集群搭建
    Hadoop+Hbase+Zookeeper分布式存储构建
    正则文本处理
    Haproxy+keepalived高可用集群实战
    httpsqs消息队安装
    LVS-TUN模式
    一.4.序列化使用之机柜资源及序列化高级用法
    一.3.序列化使用之idc资源与api文档
  • 原文地址:https://www.cnblogs.com/oldfish123/p/14393405.html
Copyright © 2020-2023  润新知