Integer和int
例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。