自动装箱和拆箱是Java提供给程序员的语法糖,方便了程序员开发,Java为每种基本数据类型都提供了对应的包装器类型。Integer和int类型变量的相互转换,代码如下所示:
Integer i = 1;
int j = i;
int m = 2;
Integer n = m;
但是既然是语法糖,那就意味着编译器帮助程序员完成了一些看不到的工作,通过javap反编译可以看到执行指令在自动装箱的时候,Java虚拟机会自动调用Integer的valueOf方法,而在自动拆箱的时候,Java虚拟机会自动调用Integer的intValue方法。那么这两个方法到底做了什么呢,源码如下所示:
public static Integer valueOf(int i) {
//如果i在[-128,127]之间,则返回int缓存值
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
//否则创建一个实例
return new Integer(i);
}
private final int value;
public Integer(int value) {
this.value = value;
}
public int intValue() {
//将构造方法中的value返回
return value;
}