zoukankan      html  css  js  c++  java
  • int和Integer的区别

    今天有个学弟问了我一个面试题:

    Integer a = 128;
    Integer b = 128;
    System.out.println(a == b);

    输出什么?为什么?说来惭愧,我的直觉告诉我会输出flase,但突然间还想不出来为什么。。所以写了个例子研究了下:

    public static void main(String[] args) {
        int i1 = 128;
        int i2 = 128;
        Integer i3 = 128;
        Integer i4 = 128;
        Integer i5 = new Integer(128);
        Integer i6 = new Integer(128);
    
        System.out.println(i1 == i2);
        System.out.println(i1 == i3);
        System.out.println(i3 == i4);
        System.out.println(i3 == i5);
        System.out.println(i5 == i6);
    }

    结果输出:

    true
    true
    false
    false
    false

    这里前两个和后两个都很好理解,就不说了,第三个也就是开头提出的那个问题,输出flase说明i3和i4是两个不同的对象。然后debug看了一下:

    为什么一样的值也没有使用new但是对象却有两个呢,在网上查了下找到了答案:

    Integer i3 = 128; 实际上执行了 Integer i3 = Integer.valueOf(128);

    public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
             return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

    也就是说,对于-128到127之间的数,Integer会进行缓存,比如:Integer x = 127时,会将127进行缓存,下次Integer y = 127时,就会直接从缓存中取,就不会new了,所以x和y是同一个对象。

    但是Integer z = 128时,会直接返回new Integer(128),下次Integer w = 128时也直接返回new Integer(128),所以z和w不是同一个对象。

    最后,总结一下这类题目:

    1.无论何时,Integer与new Integer不会相同,不会经历拆箱过程,如例子中的i3的引用指向专门存放它的内存(常量池),而i4的引用指向堆,他们的内存地址不一样

    2.无论何时,两个都是new出来的,都不是同一个对象

    3.两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false,上面例子解释过了

    4.int 和 integer(无论是不是new出来的)比,会把Integer自动拆箱为int再去比,这个时候比较的是数值,数值一样都为true

    
    
    作者:鹿丸不会多项式 出处:http://www.cnblogs.com/hechao123 转载请先与我联系。
  • 相关阅读:
    现实世界的Windows Azure:采访Definition 6首席技术官Paul Hernacki
    CloudConnect回顾,以及数据的未来
    现已可用:集成了Web Deploy的Windows Azure SDK 1.4更新版
    使用Azure SDK 1.4.1中的Web Deploy
    现实世界的SQL Azure:采访Zitec公司CEO,Alexandru Lapusan
    Microsoft和Toyota宣布战略合作伙伴关系,联手构建基于Windows Azure的下一代远程通信系统
    Delphi 2007 的重构功能
    关于类的入门的例子(6): 类引用示例
    获取所有汉字与 Unicode 的对照表
    关于类的入门例子(4): property
  • 原文地址:https://www.cnblogs.com/hechao123/p/6479815.html
Copyright © 2011-2022 走看看