2022年10月27日
一、装箱和拆箱分别什么意思?(可以扩展说明一下自己对于它的理解)
1、定义:
简单来说:装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型。
装箱:用于在垃圾回收堆中储存值类型。装箱是值类型到Object类型或到此类型所实现的任何接口类型的隐式转换。
拆箱:从object类型到值类型或从接口类型到实现该接口的值类型的显示转换。
2、为何需要装箱?(为何要将值类型转为引用类型?)
一种最普通的场景是,调用一个含类型为Object的参数的方法,该Object可支持任意为型,以便通用。当你需要将一个值类型(如Int32)传入时,需要装箱。
另一种用法是,一个非泛型的容器,同样是为了保证通用,而将元素类型定义为Object。于是,要将值类型数据加入容器时,需要装箱。
二、能用foreach 遍历访问的对象的要求?
能用foreach遍历访问的对象必须是集合或数组对象
三、GC 是什么? 为什么要有GC?
GC是垃圾收集的意思,内存处理是开发人员容易出现问题的地方,忘记或者错误地内存回收会导致程序或者系统的不稳定甚至崩溃,提供的垃圾回收机制可以自动检测对象是否超过作用域从而达到自动回收的目的。
垃圾回收的原理
1、对于程序员来说,用new关键字即在堆中分配了内存,我们称之为“可达”。对于GC来说,只要所有被引用的对象为null时,我们称之为“不可达”,就将进行内存的回收。
2、当一个对道被创建时,GC开始监控这个对象的大小、内存地址及使用情况。GC采用有向图的方式记录和管理堆(heap)中的所有对象,通过这种方式可以明确哪些对象是可达的,哪些不是。当确定为不可达时,则对其进行回收。
3、保证GC在不同平台的实现问题,net规范对其很多行为没有进行严格的规定。对于采用什算法,什么时候进行回收等。