装箱与拆箱
来源:互联网 发布:网络教育靠谱吗 编辑:程序博客网 时间:2024/05/14 03:24
总结来说:装箱就是将值类型转化成引用类型,拆箱就是就是将引用类型转化成值类型
int n = 10; string s = n.ToString();//这个不是装箱。string与int是完全不同的两种类型,没有父子类关系,所以不可能发生装箱和拆箱, 因为本身就不具备类型直接转换的功能。 Console.WriteLine(s);
int n = 10; //n是int类型,int就是Int32,而Int32是一个结构继承字System.ValueType而该类又继承自Object,所以int类型与object类型具有子父类关系,所以可以发生类型 object o = n;//这里发生了一次装箱。 Console.WriteLine(o);
Person p = new Person(); object o = p; //都是引用类型,所以没有装箱。 Console.WriteLine(o);
int n = 10, m = 100; string s1 = "58"; string s2 = "200"; string s = n + m + s1 + s2; //只发生了一次装箱,先把n与m相加,然后再与字符串拼接,调用Concat()方法,转换成object类型。 //string s = n + s1 + m + s2;//这里发生了两次装箱 int r = int.Parse(s); Console.WriteLine(r);//如果遇到函数重载有对应的类型则也不发生装箱。 //Console.WriteLine("最后结果是:{0}", r);// 这里调用了object参数的重载所以这里也装箱了
拆箱:
double d = 90; object o = d; //装箱 int n = (int)o;//拆箱,但是拆箱有问题,装箱的时候使用的什么数据类型,拆箱的时候必须还是使用对应的数据类型拆箱。
装箱与拆箱的效率问题:
ArrayList arraylist = new ArrayList(); Stopwatch watch = new Stopwatch(); watch.Start(); for (int i = 0; i < 10000000; i++) { arraylist.Add(i); } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); Console.ReadKey();执行结果为:
........................................................................
1339 毫秒
下面没有装箱:
List<int> list = new List<int>(); Stopwatch watch = new Stopwatch(); watch.Start(); for (int i = 0; i < 10000000; i++) { list.Add(i); } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); Console.ReadLine();执行结果为:
........................................................................
162毫秒
由以上可知装箱,拆箱是十分影响性能的
1 0
- 拆箱与装箱
- 装箱与拆箱
- 装箱与拆箱
- 装箱与拆箱
- 拆箱与装箱
- 装箱与拆箱
- 装箱与拆箱
- 装箱与拆箱
- 装箱与拆箱
- 拆箱与装箱
- 装箱与拆箱
- 装箱与拆箱
- 装箱与拆箱
- 拆箱与装箱
- 装箱与拆箱
- 装箱与拆箱
- 装箱与拆箱
- 装箱与拆箱
- QT收费吗?
- C++ function overriding
- VLFeat SLIC超像素分割(Cpp版)
- 去除手机页面点击元素的阴影
- HttpClient 学习整理1
- 装箱与拆箱
- UIView
- __block 和 __weak 区别
- 一个产品经理眼中的云计算:前生今世和未来
- Android访问网络主要使用HttpUrlConnection以及HttpClient
- CentOS 7上搭建Wordpress平台
- RANSAC算法做直线拟合
- 【翻译自mos文章】在不同操作系统下的UNIX命令
- android studio系列之插件Android ButterKnife Zelezny