装箱操作:将值类型转换为引用类型
拆箱操作:将引用类型转换为值类型
装箱步骤:
- 内存分配:在托管堆中分配好内存空间以存放复制的实际数据。
- 完成实际数据的复制:将值类型实例数据复制到新分配的内存中。
- 地址返回:将托管堆中的对象地址返回给引用类型变量
拆箱操作:
- 检擦实例:首先检查要进行拆箱操作的引用类型变量是否为null,如果为null抛出异常,不为null则继续检查变量是否和拆箱后的类型是同一类型,如不是,则抛出异常
- 地址返回:返回已装箱变量的实际数据部分的地址
- 数据复制:将托管栈中的实际数据复制到栈中
装箱拆箱对性能有很大的影响:
- 如果程序代码中存在过多的装箱和拆箱操作,由于两个过程都需要数据复制,该操作将会消耗大量额外运行的时间。
- 并且装箱拆箱过程中必然会产生对于的对象,这步加重了GC垃圾回收的负担,导致性能降低
- 还可能引发一些潜在的bug
解决办法:在于数据类型的确定,不要轻易对数据类型进行转换操作