拆箱和装箱是什么?作用是什么?为什么要进行拆箱和装箱?

1、定义:装箱是将值类型装换成引用类型的过程;拆箱就是将引用类型转换成值类型的过程;
 装箱:用于在垃圾回收堆中储存值类型。装箱是值类型到Object类型或到此类型所实现的任何接口类型的隐式转换。
 拆箱:从object类型到值类型或从接口类型到实现该接口的值类型的显示转换。
2、在JDK1.5之前,要生成一个数值为1的Integer对象,需这样写:
Integer i = new Integer(1);
从JDK1.5开始就提供了自动装箱的功能,要生成一个数值为1的Integer对象,只需:
Integer i = 1;(这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。)
举例:
Integer i = 1;  //装箱(定义的时候自动进行装箱)
int j = i;   //拆箱(进行赋值或者逻辑运算时会自动进行拆箱)(将引用类型Integer的i转换成值类型int的i,然后进行赋值或者四则运算)
3、作用是什么?为什么要进行拆箱和装箱?
Java是一种完全面向对象的语言。因此,包括数字、字符、日期、布尔值等等在内的一切,都是对象。似乎只需要一种方式来对待这些对象就可以了。
对于CPU来说,处理一个完整的对象,需要很多的指令,对于内存来说,又需要很多的内存。如果连整数都是对象,那么性能自然很低。
于是创造了这样一种机制,使得这些基本类型在一般的编程中被当作非对象的简单类型处理,在另一些场合,又允许它们被视作是一个对象。
这就是装箱和拆箱。
作用:为了保证通用性和提高系统性能
一种最普通的场景是调用一个包含类型为Object的参数的函数(方法),该Object可支持任意 类型,以便通用。当你需要将一个值类型传入容器时,就需要装箱了。
另一种的用法,就是一个泛型 的容器,同样是为了保证通用,而将元素定义为Object类型的,将值类型的值加入该容器时,需要装箱。
4、如何进行装箱和拆箱?

如下通过反编译: int装箱的时候自动调用Integer的valueOf(int)方法;Integer拆箱的时候自动调用Integer的intValue方法。

装箱是通过调用包装器类的 valueOf 方法实现的

拆箱是通过调用包装器类的 xxxValue 方法实现的,xxx代表对应的基本数据类型(int,short,long,double,byte,char,float,boolean)。

原文地址:https://www.cnblogs.com/cdlyy/p/12512320.html