基础:C#装箱拆箱的计算
2010-07-30 16:25
211 查看
装箱和拆箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个新对象。次之,拆箱所需的强制转换也需要进行大量的计算.
装箱
装箱用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
int i = 123;
object o = i;
在堆栈上创建对象引用 o,而在堆上则引用 int 类型的值。该值是赋给变量 i 的值类型值的一个副本。下图说明了两个变量 i 和 o 之间的差异。
所以此时改变i的值,o的值是不会变的。因为原始值类型和装箱的对象使用不同的内存位置。
拆箱
拆箱操作包括:
检查对象实例,以确保它是给定值类型的装箱值。
将该值从实例复制到值类型变量中。
装箱
装箱用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
int i = 123;
object o = i;
在堆栈上创建对象引用 o,而在堆上则引用 int 类型的值。该值是赋给变量 i 的值类型值的一个副本。下图说明了两个变量 i 和 o 之间的差异。
所以此时改变i的值,o的值是不会变的。因为原始值类型和装箱的对象使用不同的内存位置。
拆箱
拆箱操作包括:
检查对象实例,以确保它是给定值类型的装箱值。
将该值从实例复制到值类型变量中。
int i = 123; // a value type object o = i; // boxing int j = (int)o; // unboxing 要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。 尝试取消装箱 null 或对不兼容值类型的引用会导致 InvalidCastException。
相关文章推荐
- C#语言学习--基础部分(十二) --堆,栈,装箱,拆箱,安全数据类型转换:as, is
- C#基础学习之装箱,拆箱
- 装箱和拆箱(什么是装箱和拆箱) C#基础
- C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)
- C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱
- C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)
- c#基础语言编程-装箱和拆箱
- C#基础总结——装箱与拆箱
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
- c#基础语言编程-装箱和拆箱
- C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)
- C#基础(18)——List泛型集合、装箱、拆箱、字典集合与Hashtable区别
- 基础系列(4)—— C#装箱和拆箱
- [C#基础知识系列]——装箱和拆箱探索总结
- C#基础-038 装箱与拆箱
- C#基础知识整理 基础知识(18) 值类型的装箱和拆箱(一)
- C#基础知识整理 基础知识(19) 值类型的装箱和拆箱(二)
- C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)
- 【c#基础】装箱与拆箱
- C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)