ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#中的装箱与拆箱

2021-12-06 21:03:04  阅读:205  来源: 互联网

标签:类型转换 拆箱 C# int 类型 Stopwatch 装箱


现在已经很少使用ArrayList与Hashtable,除去取数据不方便之外,在加入元素以及其余操作时,花费的时间也是比较多的,效率低;对其解释涉及到装箱和拆箱的问题;

一、什么是装箱和拆箱

装箱:将数值类型转换成引用类型的值

拆箱:将引用类型转换成数值类型

int n = 10;
            object o = n;//装箱

            int nn = (int)o;//拆箱

 

二、装箱与拆箱的判别

string str = "123";
            int a = Convert.ToInt32(str);

上述代码,虽然是由引用类型转换成值类型;但是并没有发生任何的装箱和拆箱的操作;

首先应该判断两者是否是继承关系,在判断是否是拆箱和装箱;上述代码中,string类型与Int类型并不是继承关系,所以不存在装箱和拆箱的关系;

 int b = 1233;
            IComparable c = b;

上述代码发生了装箱,首先int类型与IComparable类型是继承关系;int继承IComparable,又是由值类型转换成引用类型,所以发生了装箱;

三、检验装箱操作的效率

第一组:

ArrayList arraylist = new ArrayList();
            
            Stopwatch sw = new Stopwatch();
            sw.Start();
            
            for (int i=0;i<1000000;i++)
            {
                arraylist .Add(i);
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);

输出:00:00:00.0427016

第二组:

            List<int> list = new List<int>();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i=0;i<1000000;i++)
            {
                list.Add(i);
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);

输出:00:00:00.0111906

第一组代码耗时长一些,因为发生了装箱;arrayList.Add();中的参数是Object类型的,输入的是int类型,所以发生了由值类型到引用类型的转换;

所以以后在写代码的过程中,尽量避开装箱和拆箱操作,这样会降低效率;

标签:类型转换,拆箱,C#,int,类型,Stopwatch,装箱
来源: https://www.cnblogs.com/lsj89/p/15651789.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有