C# 中装箱和拆箱的基本介绍

本文探讨了值类型与引用类型的装箱和拆箱过程,通过对比不同集合类型的性能表现,说明频繁装箱拆箱对系统性能的影响,并提供了具体的代码案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装箱:将值类型转换为引用类型  

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

值类型:int double decimal enum struct bool char ...

引用类型:数组 集合 自定义类 string object...

装箱和拆箱会对系统消耗很大, 下面我们通过代码来看一下,

​
            ArrayList listArr = new ArrayList();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 10000000; i++)
            {
                listArr.Add(i);//装箱
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);  //获取运行的时间
            Console.ReadKey();

​

 

 

向ArrayList集合中添加数据的类型是object,也就是说是将 值类型转换为引用类型, 是进行了装箱操作,上面的代码进行了一千万次装箱操作,共耗时2秒多, 

下面来看一个没有装箱或者拆箱的操作

            List<int> list = new List<int>();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 10000000; i++)
            {
                list.Add(i);
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);  //获取运行的时间
            Console.ReadKey();

 

由于list泛型集合中指定了数值类型, 所以没有进行拆箱装箱操作, 时间只用了上面操作的十分之一而已, 所以说,频繁的装箱和拆箱对系统的消耗很大,

注:

我们看两个类型之间是否发生装箱或者拆箱,首先要确定这两个类型之间是否存在继承关系。

如果存在,则有可能会发生拆箱或者装箱,

如果不存在继承关系,则不会发生装箱或者拆箱。

注意:装箱的时候使用什么类型装的箱,拆的时候也得使用对应的类型进行拆箱。(里氏转换)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖太乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值