装箱拆箱
装箱拆箱是从变量的类型上是 引用类型与值类型之间的转换
装箱:将值类型封装成引用类型
拆箱:将引用类型转换成值类型
里面包括一些定义,举个例子:
int i = 1;
object obj = i;
i = (int)obj;
i是值类型,obj是引用类型
堆:内存中一块区域,存放引用类型,需要先申请一定大小,才能往里放数据
栈:内存中一块区域,存放值类型,程序启动的时候就默认指定了大小,一般是1M,不需要再申请空间,遵循先进后出的顺序
装箱步骤:
1.将i弹到栈顶
2.在堆中申请一块空间,大小为 i的大小+额外一点空间(指针 + 同步块)
3.将栈中i的值复制到堆中(此时,堆栈中各有一份i的值,是深复制,所以修改i的值不会影响obj的值)
拆箱步骤:
将obj的值unbox为int类型的值,存放到栈中(此时也是堆栈中各有一份值,互不影响)
两者都消耗了cpu资源
但是装箱比拆箱多消耗内存(在堆中申请了内存)