2012.6.6装箱、拆箱

1.装箱、拆箱必须是: 值类型→引用类型  或  引用类型→值类型。
//object,接口。值类型是可以实现接口。
 //Person p=new Student();//这个叫隐式类型转换,不叫装箱。
//Student stu=(Student)p;//这个叫显示类型转换,不叫拆箱。
//int类型为什么能装箱到object类型,但不能装箱到string类型或Person类型,
//因为object类型是int类型的父类。


//2.拆箱时,必须用装箱时的类型来拆箱
//装箱时如果是int,拆箱必须用int,不能用double

//3.方法重载时,如果具有该类型的重载,那么就不叫拆箱或装箱。 

//4.字符串连接
 // string.Concat(s1, s2, n3, d4);判断是否发生了装箱,及次数

 

 

//总结:将值类型转换为引用类型(int→object)的时候,性能影响很大。一倍。
            //装箱:将值类型转换为引用类型。
            //拆箱:将引用类型转换为值类型。

//int n = 10;
            //object o = n;//发生了一次装箱

            //int m = (int)o;//发生了一次拆箱

            //Console.WriteLine();

            //1.装箱的时候是什么类型,拆箱的时候也用什么类型
            //int n = 10;
            //object obj = n;
            //double d = (double)obj;//报错,只能用int来拆箱。
            //Console.WriteLine(d);
            //Console.ReadKey();



            //int n = 10;
            //object obj = n;
            double d = (double)((int)obj);√
            double d = Convert.ToDouble(obj);√
            double d = double.Parse(obj);×

            Console.WriteLine(d);
            //Console.ReadKey();

            //double d = 10.5;
            //object obj = d;
            //double d1 = (double)obj;
            //Console.WriteLine(d1);
            //Console.ReadKey();

            //string s = "10";
            //object obj = s;
            //string x = (string)obj;//不是装箱或拆箱。(装箱和拆箱只限于值类型→引用类,引用类型→值类型。 )
            //Console.WriteLine(x);

            //int n = 10;
            //string s = n;

            //int n = 10;
            //IComparable compar = n; //装箱。
            //Console.WriteLine(compar.ToString());
            //Console.ReadKey();

            //总结:
            //1.装箱、拆箱必须是: 值类型→引用类型  或  引用类型→值类型。
            //object,接口。值类型是可以实现接口。
            //Person p=new Student();//这个叫隐式类型转换,不叫装箱。
            //Student stu=(Student)p;//这个叫显示类型转换,不叫拆箱。
            //int类型为什么能装箱到object类型,但不能装箱到string类型或Person类型,
            //因为object类型时int类型的父类。 
            //2.拆箱时,必须用装箱时的类型来拆箱
            //装箱时如果是int,拆箱必须用int,不能用double

            //3.方法重载时,如果具有该类型的重载,那么就不叫拆箱或装箱。 
            //4.字符串连接
            // string.Concat(s1, s2, n3, d4);判断是否发生了装箱,及次数。 

            //应用:1.面试题2。系统中使用值类型的时候要注意装箱拆箱问题。(该考虑引用类型的时候就用引用类型。 )

            //string s1 = "a";
            //string s2 = "b";
            //int n3 = 10;
            //double d4 = 99.9;
            //string result = string.Concat(s1, s2, n3, d4);
            //Q1:有没有发生装箱?      有!
            //Q2:如果有,发生了几次?  2 
            //Console.WriteLine(result);

            int n = 10;
            object o = n;
            int m = (int)o;

            Console.ReadKey();

            //5.测试增加50000个student
            //通过测试,发现,当存储引用类型数据的时候
            //泛型集合(List<Person>)与非泛型集合ArrayList,性能差距缩小,因为
            //没有发生装箱与拆箱。 

            //int x = 10;
            //Test(x);//没有发生装箱
            //double d = 9.9;
            //Test(d);//发生了装箱,因为没有double的重载,所以调用了参数为object的方法。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值