装箱和拆箱

装箱:        

装箱是值类型到Object类型或到此值类型所实现的任何接口类型的隐式转换,用于在垃圾回收堆中储存值类型。
      
         装箱实际上是指将值类型转换为引用类型的过程,装箱的执行过程大致可以分为以下三个阶段:
         (1)从托管堆中为新生成的引用对象分配内存。
         (2)将值类型的实例字段拷贝到新分配的内存中。
         (3)返回托管堆中新分配对象的地址,该地址就是一个指向对象的引用了。

        如:
          int val = 100;
          object obj = val;  //装箱
          Console.WriteLine("对象的值 = {0}", obj);

        装箱生成的全新的引用对象,这会损耗一部分的时间,因此会造成效率的降低,所以应该尽量避免装箱操作。一般情况下,符合下面的情况时可以实施装箱操作:
        (1)调用一个含Object类型的参数方法时,该Object可以支持任意的类型以方便通用,当开发人员需要将一个值类型传入时就需要装箱。
        (2)使用一个非泛型的容器,其目的是为了保证能够通用。因此可以将元素类型定义为Object,于是如果要将值类型数据加入容器时需要装箱。



拆箱:

        拆箱也叫取消装箱,是与装箱相反的操作,它是从Object类型到值类型或从接口类型到实现该接口的值类型的显示转换。
         拆箱实际上是指从引用类型到值类型的过程,拆箱的执行过程大致可以分为以下两个阶段:
         (1)检查对象实例,确保它是给定值类型的一个装箱值。
         (2)将该值从实例复制到值类型变量中。

        代码演示:
            int val = 100;
            object obj = val;  // 装箱
            int num = (int) obj;  // 拆箱

        注意: 当一个装箱操作把值类型转换成一个引用类型时,不需要显示地强制类型转换; 而拆箱操作把引用类型转换到值类型时,由于它可以强制转换到任何可以相容的值类型,所以必须显示地强制类型转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值