更多 Java 基础知识方面的文章,请参见文集《Java 基础知识》
AutoBoxing 自动装箱
原理:
Integer a = 123
会自动调用 Integer a = Integer.valueOf(123)
关于 Integer.valueOf
方法:
可以看出,使用了 IntegerCache
。
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
当值在 -128~127 之间时,直接返回常量池中的对象。否则返回在堆中新建一个对象并返回。
例如:
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
// True,因此都是常量池中的同一个对象
System.out.println(i1 == i2);
// False,因此是在堆中新建的两个对象
System.out.println(i3 == i4);
}
UnBoxing 自动拆箱
public static void main(String[] args) {
Integer i1 = 100;
int i2 = 100;
// 将 i1 自动拆箱为 int 100, 再和 i2 比较
System.out.println(i1 == i2);
}