1.什么是堆和栈?
栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义,栈负责保存代码的执行和调用过程;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小,负责保存对象和数据。
举例说明:将栈想象成一个自顶向下堆叠而成的盒子,每调用一次方法,应用程序所发生的事情记录在栈顶的一个盒子中,而我们每次只能使用栈顶的盒子来记录执行过程。堆大多用来保存信息,因此可在任意时间访问,可以比喻成一个仓库存储着所有的东西,里面是无章可循的没有排列的先后,但是需要的信息都可以在堆里面找到。
2.什么是值类型和引用类型
值类型和引用类型包含如下:
3.值类型和引用类型的区别:
1一般而言,值类型的数据存储在内存的栈中,引用类型存储在内存的堆中(这种说法不够严谨,为记忆便利)。
2从上面的举例当中也能够看出值类型(栈)的存取速度快,引用类型(堆)存取速度慢。
3值类型表示实际数据,引用类型表示指向存储在内存中的数据的指针或引用。
4值类型继承自System.Valuetype,引用类型继承自System.Object
5栈的内存自动释放,堆有GC(垃圾回收机制)
4.装箱和拆箱
装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作,作为一个桥梁的作用。装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作。简单的来说:装箱就是值类型转换为引用类型;拆箱就是引用类型转换为值类型。
举例:
装箱是值类型到object 类型或到此值类型所实现的任何接口类型的隐式转换 int i = 10 ;object obj = i;
拆箱将引用类型转换为值类型,从object 类型到值类型或从接口类型到实现该接口的值类型的显式转换;:int i=0;Object obj=i;int j=(int)obj;