1、自动装箱
Integer i1=100;
Integer i2=100;
System.out.println(i1==i2);//true
Integer i1=200;
Integer i2=200;
System.out.println(i1==i2);//false
/*自动装箱调用的是valueOf()方法,执行valueOf()方法会先判断i的值。
因为在Integer的缓存中放入了常见的int值-128-127;提高执行效率
如果需要自动装箱的值在缓存的范围内,会从常量池中拿出数据,不需要new对象。所以比较相等。
否则会调用Integer的构造方法进行自动装箱,会new对象,我们知道new出的是地址值肯定不一样*/
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
static final int low = -128;
static final int high= 127;
2、自动拆箱
Integer i1=200;
int i2=200;
System.out.println(i1==i2);//true
/*自动拆箱调用的是intValue()方法会直接返回value的值,
在比较是i1转换为int类型的数据进行比较*/
public int intValue() {
return value;
}
private final int value;