装箱、拆箱之区别
| 定义 | 例子 |
|
装箱 | 将值类型转换为引用类型 | int i=123; object o=(object)i ; | 低类型—>高类型 |
拆箱 | 将引用类型转换为值类型 | o=123; i=(int)o; | 高类型-à低类型 |
拆箱和装箱的目的
关于装箱和拆箱,往往是在对值类型进行的操作,目的是将值类型数据从在栈上的存储转移到堆上,这样就和普通Object具有了同样的存储结构,栈上存储地址,堆上存储数据.这样就可以达到统一处理的效果。
什么情况下需要装箱和拆箱
值类型数据是分配在栈中,而引用类型数据分配在堆上。那么如果要把一个值类型数据放到堆上,就需要装箱操作;反之,把一个放在堆上的值类型数据取出来,则需要进行拆箱操作。
优点
利用装箱和拆箱功能,可通过允许值类型的任何值与Object类型的值相互转换,将值类型与引用类型连接起来。
缺点
相对于简单的赋值而言,装箱和拆箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个全新的对象。其次,拆箱所需的强制装换也需要进行大量的计算。总之,装箱拆箱是耗费时间和资源的。
简单介绍堆、栈
堆 | 程序员根据需要自己申请的空间 | 引用类型在堆中分配内存 | 后进先出(即后存放的先取,先存放的后取) |
栈 | 系统自动分配空间的 | 值类型在栈中分配内存 | 存取随意 |