Integer创建机制
面试题
Integer integer = new Integer(1);
Integer integer1 = new Integer(1);
System.out.println(integer==integer1);
Integer integer2 =1;
Integer integer3 =1;
System.out.println(integer2==integer3);
Integer integer4 =128;
Integer integer5 =128;
System.out.println(integer4==integer5);
Integer integer6 =128;
int i =128;
System.out.println(integer6==i);//true 当Integer与int进行比较时。会自动拆箱为int类型
分别输出的结果为
false //因为integer与integer1都是new出来的对象,它比较的是两者是否是同一个对象
true //这里的底层方法为 Integer.valueOf(n),此方法的底层实现为判断n的范围,若-128<n<127,则直接返回Integer类型的该值,否则直接new一个Integer类型的对象
false // 此处128超出Integer.valueOf(n)方法的范围,是直接new一个新对象,所以是两个对象的比较,情况与第一种一样
Integer.valueOf(n)的源码如下
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high) //-128<= i <=127
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}