问题:关于 Java 包装类,包装类的自动装箱和自动拆箱你怎么理解?
1)什么是包装类?
从程序语言来说,Java语言是一个面向对象语言,但是在Java中的基本数据类型不是“面向对象的”,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类,有些地方也翻译为外覆类或数据类型类。
一句话来说:Java 中包装类就是基本数据类型对象。包装类位于 java.lang包下。
2)基本数据类型和包装类对比
这八种包装类所继承的父类不全都相同
a)Integer 、Byte 、Float、Double、 Short、Long都属于 Number 类的子类,Number 类本身提供了一系列的返回以上六种“基本数据类型”了的操作。
b)Character 属于 Object 子类。
c)Boolean 属于 Object 子类。
Number类的作用
由此可知,Number 是一个 抽象类,里面包含了将包装类的内容转换为“基本数据类型”。
主要方法有:
装箱和拆箱
以Integer 和 Double 为例:
① 将基本数据类型变为包装类,称为装箱
② 将包装类的类型变为基本数据类型成为拆箱
装箱,如下图:
源码是这样:
当 java 文件被编译成 class 文件后,i1 和 d1 发生了装箱
(可能有同学有疑问 Double 为什么没有像 Integer一样调用 Double.valueOf(d1) ),这里我们可以去看下class 文件中在 jvm 中执行流程,其实他是发生了自动装箱的。
在 JDK1.5 之前,对于程序本身来说,包装类不能直接进行 “+ ,-,*,/ ,++ ,-- ”等操作的,因为是一个类。
但是在 JDK1.5 之后,对程序的包装类功能进行了改变,增加了自动装箱和自动拆箱的功能,而且,可以使用包装类直接进行数字运算。
自动装箱和自动拆箱也就是,可以自动由int-->Integer类型转变,而自动拆箱就是自动由Integer-->int转变。