一、为什么需要装箱和拆箱?
基础数据类型是数据,不是对象,也不是Object的子类。Java为每种基本数据类型都提供了对应的包装器类型。装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。
把一个基本类型包装成对应的包装器类对象,有以下三点好处:
- 一是包装器类对象具有很多可以调用的方法;
- 二是Java向面像对象语言的靠近。其实Java还不算是很纯的面向对象的语言。真正的面向对象,是没有基本数据类型的。它只有一种类型,就是对象;
- 三是在泛型中,基本类型是不可以做泛型参数的。如:List <int> list = new ArrayList<int> ();这是不合法的。你只能这个样写List<Integer> list = new ArrayList<Integer> ();也就是要用int型的包装类类型来解决基本类型不可以做泛型参数的问题 。
八种基本数据类型,对应的包装器类型如下图:
二、什么是自动装箱、自动拆箱?
基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。
1、自动装箱
当我们创建一个Integer对象时,可以这样:
Integer obj = 100; //实际上,系统执行了Integer obj = Integer.valueOf(100);
实际上,执行上面那句代码的时候,系统为我们执行了:Integer obj = Integer.valueOf(100); 这就是基本数据类型的自动装箱功能。
2、自动拆箱
自动拆箱(unboxing),也就是将对象中的基本数据从包装器对象中自动取出。如下可实现自动拆箱:
Integer obj = 10; //装箱,实际上执行了 Integer obj = Integer.valueOf(10); int num = obj; //拆箱,实际上执行了 int num = obj.intValue();
三、推荐阅读
装箱和拆箱实现的原理?面试中装箱和拆箱的问题?推荐阅读以下博客: