装箱和拆箱
- 装箱:将基本数据类型转换成封装类型。
- 拆箱:将封装类型转换成基本数据类型。
自动装箱和自动拆箱
在jdk1.5开始增加了自动装箱和自动拆箱机制,就是为了方便基本类型和封装类型之间的互相转换。
下面来看看自动装箱(拆箱)和显示装箱(拆箱)的例子:
Integer a1 = 3; // 自动装箱
Integer a2 = Integer.valueOf(3); // 显示装箱
int a3 = new Integer(3); // 自动拆箱
int a4 = new Integer(3).intValue(); // 显示拆箱
自动装箱 / 拆箱的实现
其实自动装箱或拆箱是通过编译器自动执行的,当然调用的方法还是一样的。下面来看看源码实现。以Integer为例:
Integer.valueOf(int i)
首先进入valueOf方法。这里先判断传入的值是否在IntegerCache.low和IntegerCache.high范围之内,如果在则从IntegerCache.cache数组中直接返回一个对象,否则就new一个新的对象。
public static Integer valueOf(int i) {
// -128 < i < 127,返回一个缓存对象
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];