Integer和int

时间:2022-06-26 09:04:32

例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对象赋一个int值得时候,会调用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。