例1:

public static void main(String[] args){
       Integer a = 128,b = 128;
       Integer c = 127,d = 127;

       System.out.println(a==b);
       System.out.println(c==d);
}

当我们给一个Integer对象赋一个interesting值得时候,会调用Integer类的静态方法valueOf,其源代码实现为

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();
}         

如果整型字面量的值介于-128到127之间,就不会new一个新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的运行结果为:

 false

 true

例2:

public static void main(String[] args){
       Integer a = new Integer(128);
       int b = 128;
       Integer c = new Integer(6);
       Integer d = new Integer(6);

       System.out.println(a==b);
       System.out.println(c==d);
}

当int和Integer做==比较的是偶,Integer类型会自动拆箱,也就是把Integer转成int类型,所以这里比较的是int类型的值,所以a==b为true;

c==d中c、d这里的Integer是new出来的,并不是用的缓存,所以结果为false。

 

版权声明:本文为GuYL原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/GuYL/p/8228972.html