Java中有8大基本数据类型,其为每种基本数据类型都提供了对应的包装器类型。
包装类型 | 基本数据类型 |
---|---|
boolean(未知) | Boolean |
byte(2字节) | Byte |
char(2字节) | Character |
short(2字节) | Short |
int(4字节) | Integer |
long(8字节) | Long |
float(4字节) | Float |
double(8字节) | Double |
Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,**(JDK5以前)**就出现了包装类型,它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。
另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装Object的,这是就需要这些基本类型的包装器类了。
声明一个包装类以Character为例,声明一个字符A的包装类,JDK 5以前的声明方式
Character ch = new Character('A'); // 包装类 变量名 = new 包装类(字符);
JDK 5以后,提供了自动装箱功能,可以自动根据字符创建对应的Character对象。
Character ch = 'A'; // 包装类 变量名 = 字符;
既然有了装箱,就必然存才拆箱。顾名思义,就是自动将包装类对象转化为基本数据类型。
Character ch = 'A'; // 包装类 变量名 = 字符; char c = ch; //拆箱
下图是字节码和源码对比图
通过字节码文件,我们可以看出,在装箱时自动调用了Character.valueOf(char c),在拆箱时自动调用了Character.charValue()。经过实验,其他包装类也具备类似的过程。
装箱:自动将基本数据类型装换为包装类对象,通过包装类的valueOf()实现。
拆箱:自动将包装类对象装换为基本数据类型,通过包装类的xxValue()(xx是对应的基本数据类型)。