在Java中,Java对每种基本数据类型都提供了对象的包装器类型。看下表:
包装类对应表
基本数据类型 | 包装类 |
---|---|
byte | Byte |
boolean | Boolean |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
在Java SE5之前,如果要生成1个数值为50的Integer对象,需要这么进行:
Integer obj = new Integer(50);
而在Java SE5开始,Java就封装了自动装箱的特性,定义数值是这样做就能够:
Integer obj = 50;
这个进程中自动根据数值创建Integer对象,就叫装箱;
简单1点说,装箱就是 自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。
那甚么是拆箱?和装箱对象,就是将包装器类型转换成基本数据类型。拆装箱的进程以下图:
我们以Double类型为例,先看下面的1段代码:
public class Main{
public static void main(String[] args){
Double DB = 10.34;
double db=DB;
}
}
然后我们对这段代码进行反编译,结果以下:
然后我们换成Integer类型的再试试,直接看结果:
看出有甚么相同来了没有,程序在自动装箱的时候自动调用valueof方法,在拆箱的时候,调用相应的类型的”**.**Value”方法。
由此可以看出,程序的自动装箱是调用包装器类型的valueof方法,而拆箱是调用包装器的”**.**Value”方法来实现的。