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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴泉水 黑马帝   /  2011-12-12 17:02  /  3467 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

哪位哥们解释的清楚?

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

9 个回复

倒序浏览
余飞 黑马帝 2011-12-12 17:04:59
沙发
通过装箱和拆箱,可以轻松的实现值类型与引用类型的互相转换,任何类型的值最终都可以按照对象进行处理.

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

回复 使用道具 举报
经睿 黑马帝 2011-12-12 17:15:54
藤椅
值类型转换为引用类型叫装箱
由值类型转换成的引用类型再还原成值类型叫拆箱

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
乔克 黑马帝 2011-12-12 17:27:16
板凳
1.装箱 是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
2.拆箱(取消装箱)是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:
检查对象实例,确保它是给定值类型的一个装箱值。(拆箱后没有转成原类型,编译时不会出错,但运行会出错,所以一定要确保这一点。用GetType().ToString()判断时一定要使用类型全称,如:System.String 而不要用String。)
将该值从实例复制到值类型变量中。

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
小石 黑马帝 2011-12-12 17:28:44
报纸
装箱是值类型转换成引用类型,例如:int类型转换成object类型
拆箱是引用类型转换成值类型,例如:object类型转换成int类型

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
楼上的解释都挺好的!我也献丑了哈!!
装箱其实就是指将一个值类型转换成一个引用类型,或者把值类型转换成一个被该值类型应用的接口类型。例如:int i =100;object obj=i;
拆箱指将一个引用类型或一个对象类型转换成一个值类型的过程。

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
周文军 黑马帝 2011-12-13 09:39:25
7#
装箱:你可以看做电脑主机箱;把主板,电源等等单独零件,放入主机箱里进行组装起来。
拆箱:你可以理解为把主机箱的那些零件一个一个单独取出来.

评分

参与人数 1技术分 +1 收起 理由
李荣壮 + 1

查看全部评分

回复 使用道具 举报
董伟 黑马帝 2011-12-13 11:09:43
8#
                  using System;
                  class Test()
                  {
                           static void Main()
                           {
                                    int i = 1;
                                    Object o = i; // 装箱
                                    int J = (int)i;  //拆箱,取消装箱
                           }
                  }
           装箱:是将值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。
           当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。 取消装箱将从对象中提取值类型。
           装箱是隐式的;取消装箱是显式的。 装箱和取消装箱的概念是类型系统 C# 统一视图的基础,其中任一类型的值都被视为一个对象。
                        
           拆箱:取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。 取消装箱操作包括:
               检查对象实例,以确保它是给定值类型的装箱值。
               将该值从实例复制到值类型变量中。
回复 使用道具 举报
张大福 黑马帝 2011-12-13 20:36:26
9#
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
    在.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时拆箱。

    装箱和拆箱虽然满足了两只类型之间的转换。但是当量特别大是肯定会大大影响程序的效率。所以,在应用中,我们应该尽量避免装箱和拆箱操作。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马