C#中的堆栈,值类型与引用类型
内存分配
内存用来存储正在执行的程序,分为两个区域
栈区:占地小,方便找,读取速度较快
堆区:占地大,读取速度较慢(比硬盘快)
值类型与引用类型
因为方法执行于栈中,所以方法声明的变量都在栈中(仅仅存在于局部变量中,与成员变量的声明和存储不同),但由于值类型直接存数据,引用类型直接存引用(不管是局部变量还是成员变量都通用),所以两者应用方法会有差别
有以下是方法内值类型与引用类型存储方式不同的影响:

程序执行上图代码时的结果如下

修改一下再问

修改了堆
程序执行上图代码时的结果如下



<修改了栈>这张截图中最后一行代码后,因为修改后i01创建了一个新的”引用”(引用02),在堆中开辟了与i02没有关系的新地方,所以i02的”引用”(引用01)和堆中的值将不会改变
按照上面的说法,同为引用类型的s01给s02赋值”a”后再把堆中的数据改成”b”,s02应该也随着堆中的修改变成”b”

可运行后发现上图的结果却没有任何改变,就像图1-7只改变了s01,因为s01=”b”实际上修改的是栈,创建了一个新引用,和new数组是一个原理
判断代码是修改堆还是修改栈的小技巧:看修改的变量右边有没有加中括号,加了就是修改堆,没加就是修改栈