黑马程序员技术交流社区
标题:
装箱,拆箱是啥玩意儿?
[打印本页]
作者:
吴泉水
时间:
2011-12-12 17:02
标题:
装箱,拆箱是啥玩意儿?
哪位哥们解释的清楚?
作者:
余飞
时间:
2011-12-12 17:04
通过装箱和拆箱,可以轻松的实现值类型与引用类型的互相转换,任何类型的值最终都可以按照对象进行处理.
作者:
经睿
时间:
2011-12-12 17:15
值类型转换为引用类型叫装箱
由值类型转换成的引用类型再还原成值类型叫拆箱
作者:
乔克
时间:
2011-12-12 17:27
1.装箱 是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
2.拆箱(取消装箱)是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:
检查对象实例,确保它是给定值类型的一个装箱值。(拆箱后没有转成原类型,编译时不会出错,但运行会出错,所以一定要确保这一点。用GetType().ToString()判断时一定要使用类型全称,如:System.String 而不要用String。)
将该值从实例复制到值类型变量中。
作者:
小石
时间:
2011-12-12 17:28
装箱是值类型转换成引用类型,例如:int类型转换成object类型
拆箱是引用类型转换成值类型,例如:object类型转换成int类型
作者:
许全通
时间:
2011-12-12 21:41
楼上的解释都挺好的!我也献丑了哈!!
装箱其实就是指将一个值类型转换成一个引用类型,或者把值类型转换成一个被该值类型应用的接口类型。例如:int i =100;object obj=i;
拆箱指将一个引用类型或一个对象类型转换成一个值类型的过程。
作者:
周文军
时间:
2011-12-13 09:39
装箱:你可以看做电脑主机箱;把主板,电源等等单独零件,放入主机箱里进行组装起来。
拆箱:你可以理解为把主机箱的那些零件一个一个单独取出来.
作者:
董伟
时间:
2011-12-13 11:09
using System;
class Test()
{
static void Main()
{
int i = 1;
Object o = i; // 装箱
int J = (int)i; //拆箱,取消装箱
}
}
装箱:是将值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。
当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。 取消装箱将从对象中提取值类型。
装箱是隐式的;取消装箱是显式的。 装箱和取消装箱的概念是类型系统 C# 统一视图的基础,其中任一类型的值都被视为一个对象。
IC76458.gif
(1.92 KB, 下载次数: 56)
下载附件
2011-12-13 11:09 上传
拆箱:取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。 取消装箱操作包括:
检查对象实例,以确保它是给定值类型的装箱值。
将该值从实例复制到值类型变量中。
作者:
张大福
时间:
2011-12-13 20:36
装箱就是将值类型转换成引用类型。比如:结构体→类
拆箱就是将引用类型转换成值类型。比如:类→结构体
作者:
liuyinggzu
时间:
2011-12-14 11:21
在.net中所有的类型都继承自System.Object,所有的类型都是对象.类型主要分为两种,一是值类型,包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、枚举(enum)、结构(struct).另一类是引用类型,包括类、数组、接口、委托、字符串等.
其中值类型是在栈中分配内存,本身的声明就是一个初始化的过程,其不需要进行垃圾回收,只要超出所定义的作用范围会自动释放内存.
而引用类型则是在堆中分配的,在堆种分配内存,而其托管堆进行垃圾回收.
当两种数据类型进行转换时就引出了装箱/拆箱.
装箱:值类型到引用类型或到此值类型所实现的任何接口类型的隐式转换
例如: int temp = 3;
System.Object obj = temp;
其中,temp为值类型,在栈中分配;当分配obj这个引用类型时,我们需要在堆中分配一个obj对象,然后把temp值赋给它,这么一系列的过程就是装箱的过程。
拆箱:从引用类型到任意值类型的显式转换。与装箱不同,拆箱式显示装换。
例如:int temp = 3;
System.Object obj = temp;
int i = (int) obj;
拆箱过程中,首先来确定对象obj为一个值类型的装箱值,然后把值赋给值类型。
加个例子强化一下理解,
int temp = 3;
object obj = temp;
Console.WriteLine (temp + "," + (int) obj);
在此过程中,进行了3次装箱和1次拆箱;很明显,obj = temp时第一次装箱,temp + "," + (int) obj中,temp要先转换为String类,第2次装箱,(int)obj第3次装箱成引用类型。obj转换为int时拆箱。
装箱和拆箱虽然满足了两只类型之间的转换。但是当量特别大是肯定会大大影响程序的效率。所以,在应用中,我们应该尽量避免装箱和拆箱操作。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2