A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凌晨丶草未眠 中级黑马   /  2013-11-3 22:34  /  2056 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是装箱和拆箱?

9 个回复

倒序浏览
装箱:用于在垃圾回收堆中存储值类型。装箱时值类型到object类型或到此类型所实现的任何接口类型的饮食转换。
装箱:从object类型到值类型或从接口类型到实现接口的值类型的显示转换。

评分

参与人数 1技术分 +1 收起 理由
陈福军 + 1

查看全部评分

回复 使用道具 举报
用我的方法记很简单:
装箱:值类型到引用类型
拆箱:引用类型到值类型
注意:发生装箱拆箱要满足的条件!(发生装箱和拆箱的两种类型之间必须存在继承关系)
同时要注意,在程序中要避免发生装箱和拆箱操作
这里拿两个类来举例,就会很明白了 ArrayList  和List<T>
执行代码如下:
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;

  8. namespace 装箱拆箱
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             int n = 10;
  15.             object o = n;//装箱
  16.             int nn = (int)o;//拆箱
  17.             //string是引用类型
  18.             string s = "123";
  19.             int nnn = Convert.ToInt32(s);//没有发生拆箱
  20.             //两者的比较
  21.             ArrayList ar = new ArrayList();
  22.             List<int> li = new List<int>();
  23.             Stopwatch sw = new Stopwatch();
  24.             sw.Start();//监视开始
  25.             for (int i = 0; i < 10000000; i++)
  26.             {
  27.                 ar.Add(i);//这里的Add方法的参数类型是object
  28.             }
  29.             sw.Stop();//监视停止
  30.             Console.WriteLine(sw.Elapsed);//获取执行之间的代码运行时间
  31.             sw.Start();
  32.             for (int i = 0; i < 10000000; i++)
  33.             {
  34.                 li.Add(i);//这里的Add方法的参数类型是int
  35.             }
  36.             sw.Stop();
  37.             Console.WriteLine(sw.Elapsed);
  38.             
  39.         }
  40.     }
  41. }
复制代码

评分

参与人数 1技术分 +2 收起 理由
陈福军 + 2

查看全部评分

回复 使用道具 举报
ArrayList的Add方法发生了装箱操作
List的Add方法没有发生
2者的运行时间相差很多
所以在存储相同类型的变量的集合中
ArrayList现在很少使用,都使用泛型集合了
回复 使用道具 举报
装箱就是将值类型转换为引用类型
拆箱就是将引用类型转换为值类型

装箱可以隐式转换,因为值类型都继承自Object
强制拆箱的时候可能会抛出异常, 因为不是每个引用类型都能转换为值类型
回复 使用道具 举报
装箱就是将值类型转换为引用类型
拆箱就是将引用类型转换为值类型
回复 使用道具 举报
值类型存储在栈上,应用类型存储在对上。C#类是引用类型,结构式值类型。.net很容易吧值类型转换为引用类型,所以可以在需要对象的任意地方使用值类型。例如,int可以赋予一个对象。从值类型转换为引用类型称为装箱。如果方法需要把一个对象多为参数,同时传递一个值类型,装箱操作就会自动进行。另一方面,装箱的值类型可以使用拆箱操作转换为值类型。在拆箱时,需要使用类型强制转换运算符。

评分

参与人数 1技术分 +1 收起 理由
陈福军 + 1

查看全部评分

回复 使用道具 举报
装箱:就是将“值类型”转化为“引用类型”

拆箱:就是将“引用类型”转化为“值类型”

如 arraylist 中存的是object对象,如果一个值类型的值存到arraylist中,那么就会发生装箱的过程。
回复 使用道具 举报

如问题得到解决,请及时把分类修改为"已解决",这样版主才能给你加分!黑马有你更精彩!
回复 使用道具 举报
通俗的讲 就是值类型与引用类型的相互转换!!
值类型---》引用类型   是装箱
引用类型----》值类型   是拆箱
如下对你的参考:http://blog.csdn.net/chenjinglong/article/details/14421947
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马