装箱和拆箱的定义
1 | Integer i = 10; //装箱 |
- 装箱: 自动将基本数据类型转换为包装器类型。
- 拆箱: 自动将包装器类型转换为基本数据类型。
下表是基本数据类型对应的包装器类型:
基本数据类型 | 包装器类型 |
---|---|
int | Integer |
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
装箱和拆箱的实现
装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。1
2Integer i = 10; //相当于Integer i = Integer.valueOf(10);
int n = i; //相当于int n = i.intValue();
常见问题
1 | public class Main { |
当通过valueOf方法创建Integer对象时,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。
弊端
自动装箱和拆箱虽然给我们编程提供了很多方便,但是使用不当容易产生大量的冗余对象,增加GC的压力。