C#篇
简述ArrayList和List的主要区别:
ArrayList就是一个List<Object>而已,泛型集合的优势就是类型安全,无装箱操作;
简述装拆箱:
这里必要掌握的 Value Type(值类型) 和 ReferenceType(引用类型);
装箱:值类型转换为引用类型实例,执行装箱的操作不可避免要在堆上申请内存空间,并将堆栈上的值类型数据复制到申请的堆内存空间上。
装箱的机制: 1在堆中开辟内存空间 2 把a的值赋值到堆中 3 把堆中的地址给obj
拆箱:引用类型转换为值类型实例
拆箱的机制: 1 判断类型是否一致 2 把obj在堆中的值的地址给b
总结: 装箱和拆箱都要消耗内存和CPU资源,效率降低,尽量避免使用
可通过泛型避免。
类型转换:
类型转换分隐式转换和显式转换:
隐式转换:隐式转换是C#默认的以安全的方式进行转换,不会导致数据丢失,比如从int转换为double 从派生类转换为基类,这里数值的精度也不会丢失.
显式转换:显示转换,就是强制的数据类型转换.限制转换需要强制转换运算符,看到强制转换字如其形会造成数据精度的丢失,比如double d = 10.5; int i = (int)d; 输出的结果d=10;这里数据的精度就丢失掉了。
注意:
显式转换可能会导致错误。进行闲置转换时编译器将对转换进行溢出检测,如果溢出说明转换失败,就说明原类型不是一个合法的目标类型。无法进行类型转换。
强制类型转换会造成数据丢失。
也可以通过方法进行类型转换:(例)↓
1.ToString()。所有类型都继承Object所以都有ToString()方法,转化成字符串。
2.int.Parse()。只支持string类型,首先注意这里string的值不能为null
其次就是只能是整型不能是浮点型 报错:格式不正确
3.int.TryParse() 可以看出int.Parse()方法名前加Try.意思是它会尝试进行转换,如果类型不正确不会报错,它会返回0,这个在C#测试下就好。
4. Convert类 这个类里有许多转换的方法。这里注意我们生活中4舍5入,在C#里它是会优选进位或者退位偶数的结果。例如:4.5:4 5.5:6
5 实现类的转换,通过接口 IConventible 或者 TypeConventer。实现接口的成员方法。从而达到类型转换。
6 使用as操作符转换 但是as只能用于引用类型和可为空的类型。使用as有很多好处,当无法进行类型转换时会将对象赋值为Null,避免类型转换时报错或者出异常。C#抛出异常在进行补货一场并进行处理是很消耗资源,如果只是将对象付志伟Nul的话几乎不消耗资源也可以说消耗资源很小。