装箱和取消装箱详解
来源:互联网 发布:自行车大全软件 编辑:程序博客网 时间:2024/06/11 22:27
装箱:
装箱用于在托管内存中存储值类型。 装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。 对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
如: int i = 123; object o = i;
此语句的结果是在堆栈上创建对象引用 o,而在堆上则引用 int 类型的值。 该值是赋给变量 i 的值类型值的一个副本。
下图说明了两个变量 i 和 o 之间的差异。
也可以进行显式装箱,但显式装箱不是必需的:
如:i = 123; object o = (object)i;
取消装箱
取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。
取消装箱操作包括:
1.检查对象实例,以确保它是给定值类型的装箱值。
2.将该值从实例复制到值类型变量中。
如:i = 123; object o = i; int j = (int)o;
下图演示上述语句的结果。
取消装箱转换
注意:
要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。 尝试取消装箱 null 会导致 NullReferenceException。 尝试取消装箱对不兼容值类型的引用会导致 InvalidCastException。
性能问题:
相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。 对值类型进行装箱时,必须分配并构造一个新对象。 取消装箱所需的强制转换也需要进行大量的计算,只是程度较轻。
参考自:
https://msdn.microsoft.com/zh-cn/library/yz2be5wk.aspx
0 0
- 装箱和取消装箱详解
- 装箱和取消装箱
- 20110607-装箱和取消装箱
- java---自动装箱和自动取消装箱
- 装箱
- 装箱
- 装箱
- 装箱
- 装箱
- Java集合(一)-List与ArrayList(扩容与装箱和取消装箱)
- 装箱和拆箱的详解
- 装箱和拆箱
- 装箱和拆箱
- 装箱和拆箱
- 装箱和拆箱
- 装箱和拆箱
- 装箱和拆箱
- 装箱和拆箱
- 堆和栈的区别
- 并发容器CopyOnWriteArrayList
- android中动画的实现
- 自动计算金额,积分,节省金额,修改数量
- 《Java TCP/IP Socket编程》读书笔记
- 装箱和取消装箱详解
- 海哥看源码-Activity
- jmeter 压力测试各种值的意思 --吞吐量 样本
- Java中的null是个什么东西?
- RelativeLayout的子控件的布局属性
- scrapy xpath提取标签
- OJ之栈的基本使用
- java动态编程-Rhino脚本引擎
- 【Socket编程】篇四之并发服务器