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的方法。