值类型与引用类型的区别
什么是值类型:
直接将内存存储在栈内,由系统自动释放资源的数据类型。每一个值类型都有一个独立的内存区域保存自己的值,调用他的时候用的是他的值,而引用类型调用的是内存中的地址。
例如:
A的值是18,当把a赋给b时,系统会给b开一块新的控件保存a的值,当把b 的值改成20时就会在b的空间中保存20,与a就没有关系了,这就是值类型。
什么是引用类型?
由类型的实际值引用(类似指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或指向)原始值。引用类型在栈上存地址,推上存值。(下边附有堆栈的介绍)
例如:
A=18,这时候在内存中保存的是18,当把a赋给b的时候,他们两个引用的是同一个内存空间,b的值会保存为a的值,当把b的值改成20时,因为a和b引用的是同一个内存空间,索引a的值也会变成20.这就是引用类型。
值类型和引用类型有什么区别?
1、 将一个值类型变量赋给另一个值类型变量是,将复制包含的值,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
2、 值类型不可能派生出新的类型:所有的值类型均隐式派生自System.ValueType。但与引用类型相同的是,结构也可以实现接口。
3、 值类型不可能包含null值。
4、 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
用存钱当例子:值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。
哪些是值类型,哪些是引用类型?
堆和栈有什么区别?
栈:栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。
堆:堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存空间的大小。