C#基础知识---装箱与拆箱

一、定义

装箱:将值类型转化为引用类型,装箱一般会在堆上分配一块内存,用于存储要转换的值。

拆箱:将引用类型转化为值类型

注:.NET 2.0 引入的泛型其实在很大的程度上解决了装拆箱产生的类型转换问题,也减少了类型转换所引起的运行时的异常,及保证了类型安全,从而提高了性能。我们可以分别定义一个ArrayList(Add方法的参数是object,在添加整数的时候,需要将int转化为object类型,进行装箱操作)和一个泛型List<int> list,然后分别向这俩list中添加n多个数,测试下运行时间。

二、装箱过程图解

  int i = 123;  /System.Int32

    object o = i;  //对 i 装箱(隐式)进对象 o
  

  从图可知,对象 o 存的是地址引用,指向的是堆上的值,这个值的类型和变量 i 一样,也是 int 类型,值(123)也就是从变量 i Copy 过来的一个副本值而已。

三、拆箱过程图解

  int i = 123;      // 值类型
       object o = i;    // 装箱
       int j = (int)o;   // 拆箱

  

  要在运行时成功拆箱值类型,被拆箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。
 

原文地址:https://www.cnblogs.com/3xiaolonglong/p/9674475.html