C# 关于装箱拆箱

C# 关于装箱拆箱(装箱和拆箱损耗性能)
1.装箱:将值类型转换为引用类型,将放到堆中
2.拆箱:在堆中找到引用类型,将引用类型转换为值类型,放回栈中
备注:装箱和拆箱数据类型必须一致,例如用 double 装箱就必须用 double 拆箱,如果使用int去拆箱,如果用int去拆箱,他在堆中会找不到int 类型装箱对象

        #region 装箱拆箱
        int n = 100;
        string s = Convert.ToString(n);//没有发生装箱,只是单纯地创建了一个字符串"100"然后存储到堆中,并将变量 s 指向字符串"100"
        int m = int.Parse(s);//没有发生拆箱,只是单纯地将字符串"100"转成数值 100 放到栈中


        //int n = 100;
        //object o = n;//发生了一次装箱 将数值100转成 object类型,放到堆中
        //int m = (int)o; //发生了一次拆箱 在堆中找到 object 100放回栈中

        //int n = 100;
        //IComparable com = n;//这里发生了装箱,这种写法感觉陌生,理论基础是:接口是一种数据类型
        //Console.WriteLine(com);
        //Console.WriteLine(com.GetType());
        //int m = (int)com; //这里发生了拆箱
        //Console.WriteLine(m);
        //Console.ReadKey();

        Console.ReadKey();
        #endregion

记录时间检测装箱拆箱性能:

        #region 装箱拆箱性能问题
        ArrayList arr = new ArrayList();
        Stopwatch watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < 100000000; i++)
        {
            arr.Add(i);
        }
        watch.Stop();
        Console.WriteLine(watch.Elapsed);
        Console.ReadKey();
        #endregion
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值