抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

关于拆装箱

  • 装箱:值类型数据转换为引用类型装箱时,生成的是全新的引用对象,这会有时间损耗,因此装箱操作效率不高。
  • 拆箱:引用类型数据转换为值类型数据。
  • 利用装箱拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来。
  • 值类型只会在中分配;
  • 引用类型分配内存与托管;
  • 使用泛型可以避免拆装箱操作。

代码演示:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
namespace AlgorithmTest07_拆装箱
{
class Program
{
static void Main(string[] args)
{
int n = 100000000;
Stopwatch t1 = new Stopwatch();//计时器
Stopwatch t2 = new Stopwatch();//计时器
Console.WriteLine("测试值类型对象int");
t1.Start();//开始计时
List<int> L = new List<int>();
for (int i = 0; i < n; i++)
{
L.Add(i);//不发生装箱
int x = L[i];//不发生拆箱
}
t1.Stop();//停止计时
Console.WriteLine(t1.ElapsedMilliseconds + "ms");
t2.Start();//开始计时
ArrayList aL = new ArrayList();
for (int i = 0; i < n; i++)
{
aL.Add(i);//发生装箱[值类型(int)转引用类型(object),ArrayList是object引用类型]
int x = (int)aL[i];//发生拆箱引用类型强转值类型
}
t2.Stop();
Console.WriteLine(t2.ElapsedMilliseconds + "ms");
Console.ReadKey();
}
}
}

将运行上Debug改为Release

对比结果:

image-20221025134405445

评论