值类型:变量和数值都存储在栈空间(操作系统管理)
引用类型:变量存储在栈空间,数值存储在堆空间(垃圾回收器管理)
值类型(结构体)=:a=b a,b在栈上各有一块空间进行存储数值
引用类型(类)=:a=b a,b指向堆上同一块空间
嵌套:
1、可以在值类型中包含引用类型
2、可以在引用类型中包含值类型
值类型直接继承自ValueType,引用类型直接继承自Object
值类型的默认值为0,引用类型的默认值为null
装箱:把值类型转换为引用类型
拆箱:把引用类型转换为值类型
装箱:
1、内存分配:用来存储数值
2、完成实际数据的复制:之类型的数据复制到开辟的堆空间里
3、地址返回:返回的地址赋值为引用类型变量
拆箱:
1、检查实例:检查拆箱的引用类型是否为null,是则抛出异常;否则继续检查变量是否和拆箱后的类型是同一类型
2、地址返回:返回已装箱变量的实际数据部分的地址用来拷贝数据
3、数据复制:将托管堆中的实际数据复制到栈中
由于装箱拆箱存在数据复制,所以比较消耗资源。最好使用泛型进行编程
传参:值传递、引用传递
值传递:
1、值类型数据按值传递方式
特征:单向传递,形参改变,实参不变
2、引用类型数据按值传方式
特征:类似c传指针,让形参和实参指向同一个堆空间
引用传递:
1、值类型数据按引用传递方法
2、引用类型数据按引用传递方式
使用关键字ref out:定义和调用必须显示的添加关键字ref out