自动拆装箱
JDK 1.5 中增加了基本类型和包装类之间的自动拆装箱机制。
包装类拆箱
以 Integer
举例,它是 int
型的包装类,拆箱的本质是执行了 Integer.intValue()
方法,比如以下代码:
int i1 = 100;
Integer i2 = 100;
System.out.println(i1 == i2); // 输出true
比较 i1 和 i2 时,i2 执行了 intValue()
方法变成 int
型的值然后再去和 i1 进行比较,因此输出结果是 true
。
Integer in = new Integer(100);
int i = in;
自动拆箱机制也使得可以直接将 Integer
对象直接赋值给基本数据类型 int
,因为 in 会自动拆箱为 int
型数 100 然后再赋值给 i 。
基本数据类型自动装箱
自动装箱的本质是执行了 Integer.valueOf(int)
方法,比如:
Integer in = 100; // #1
public static void method(Integer i){}
int i = 100;
method(i); // #2
#1 我们可以直接将 int
型的值直接赋值给包装类对象,这里就是用了自动装箱,执行了 in.valueOf(100)
的操作
#2 在调用方法的时候,可以用 int
型参数代替 Integer
类参数,也是因为自动装箱机制。
总结
八种基本数据类型都有自动拆装箱机制,包装类中含有xxxValue()
方法和valueOf()
方法。
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
在需要包装类时,基本数据类型就会自动装箱,当需要基本数据类型时,包装类对象就会自动拆箱。