.net装箱和拆箱

11 篇文章 0 订阅
//装箱:值类型→引用类型
            //拆箱:引用类型→值类型
            //装箱拆箱转化,n在意义上本身就是属于object类型的,只是在o对应的对内存中复制了一个n存进去,这种转化叫装箱
            int n = 10;
            object o = n;
            int m = (int)o;

            //不属于装箱拆箱的转化,tring与int在内存存在形式上是不同的,这种虽然也是把值类型转化为引用类型,但是,这种方式是先在堆内存上开辟一个空间,然后存储一个string型的”10”,然后再把地址给str,这种不叫装箱
            int i = 20;
            string str = Convert.ToString(i);
            int y = int.Parse(str);

            //3、装箱和拆箱:必须是在内存方面存在的形式相同的转化才叫拆装箱,也就是子父类之间的转换,装的时候是什么类型装的箱,拆的时候也必须是同样的类型接受,否则会错
            //int q = 30;
            //object oo = q;
            //double d = (double)oo;
          
            //int实现了IComParable接口,所以也是装箱拆箱
            int x = 100;
            IComparable ic = x;
            int w = (int)ic;
            char ch = 's';
            string ch2 = "w";
            int n1 = 10;
            double d2 = 19;
            string r = string.Concat(ch, ch2, n1, d2);
            Console.WriteLine(r);

            #region 频繁发生拆箱和装箱和消耗时间、资源
            
            ArrayList arr = new ArrayList();
            Stopwatch sw = new Stopwatch();
            sw.Start();00:00:01.7436891时间
            for (int ii = 0; ii < 10000000; ii++)
            {
                arr.Add(ii);
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);

            sw.Restart();
            sw.Start();
            //时间00:00:00.4028327
            List<int> list = new List<int>();
            for (int ii = 0; ii < 10000000; ii++)
            {
                list.Add(ii);
            }
            sw.Stop();
            Console.WriteLine(sw.Elapsed);
            #endregion   
            
            Console.ReadKey();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值