java的装箱与拆箱

包装类

要知道什么是装箱和拆箱,首先要了解什么是包装类。
在面向对象当中“一切皆对象”。
基本数据类型变量不是对象,比如 int a = 10; 当中就没有对象,所以就很矛盾。
此时我们就可以对象基本数据类型进行包装,把基本数据类型包装一个对象。
把基本数据类型变的更强大,以面向对象的思想来去使用这些类型。

对基本数据类型包装的好处
  1. 使用包装对象后,功能变的更加强大。
    比如:以前使用double来去表示一个人的分数。此时这个人的分数考了0分,可以表示0.0。 如果这个人没有来考试,那就代表这个没有分数。使用包装类型后, 即可表示这两种状态一个0.0 一个 是null。 基本数据类型就办不到。

  2. 包装类当中给我们提供了很多方法,可以直接过来使用
    比如:我们要将一个数据转成二进制。使用包装对象后, 就可以直接调用方法算出来。使用包装对象后, 就可以直接调用方法算出来。

装箱与拆箱

  • 把基本数据类型变成包装类 我们称为装箱操作。
Integer num = new Integer(10);
Integer num2 = Integer.valueOf(20);
// Integer.valueOf本质也是new Integer创建,只不过当中多了一个缓存判断
  • 把包装类对象转成对应的基本数据类型我们称为拆箱。
Integer num = new Integer(10); // 装箱
int num2 =num.intValue() // 拆箱

Double d = Double.valueOf(10.5) // 装箱
double d1 = d.doubleValue(); // 拆箱

自动装箱与自动拆箱

  • 自动装箱:可以直接把一个基本数据类型的值赋值给包装类对象
    Integer i = 10
  • 自动拆箱:可以只直接把一个包装类对象赋值给基本数据类型的变量
    int i1 = i

自动装箱和自动拆箱是Java SE5之后才有的,它内部是如何实现的呢?我们可以借助反编译来找到答案:

public class Main{
    public static void main(String[] args) {
        Integer i = 10; // 自动装箱
        int n = i;// 自动拆箱
    }
}

反编译后得到如下结果:


fby.png

由反编译的结果可知:

  • java自动装箱过程是调用包装类的valueOf方法实现的
  • 而自动拆箱的过程则是调用包装类的xxxValue方法实现的
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。