C# 装箱与拆箱

    C#中所有的数据类型都继承自基类System.Object,拥有共同的祖先类,所以值类型和引用类型可以互相转换(显式或隐式)。

    从值类型向引用类型的转换过程称为装箱;

    从引用类型向值类型的转换称为拆箱;

1、 装箱

值类型向引用类型的转换,装箱会在堆中分配一个对象实例(申请内存空间),并将值类型的值复制到这个对象中(内存空间),会消耗内存和CPU资源;

int i =123;

objectobj = i; //隐式装箱

      

for (int i = 0; i < arr.Length; i++)

{

      //

}

在i< arr.Length时,会有一个装箱操作,当arr.Length很大时,会多次重复装箱,消耗系统内存,所以这种情况应先进行装箱:

      int L = arr.Length;

      for (int i = 0; i < L; i++)

      {

           //

      }

2、 拆箱

引用类型向值类型的显示转换,拆箱首先会检查对象实例,确保它是给定值类型的一个装箱值,然后将引用类型所指向的内存中的值从堆中复制到值类型所在的栈上(不需要额外的内存开销,所以拆箱消耗的内存比装箱消耗的要少)。转换失败时,编译不会报错,但运行时会报错,所以在不确定引用类型的对象实例类型时,应该对其用基类.GetType().ToString()进行类型检查,基类使用全称,如String.String而不要用String;

objectobj = 123; //隐式装箱

int value= (int)obj; //显示拆箱

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值