String的不变性
C#里
string
对象是不变对象(只读),因为一旦创建了该对象,就不能修改该对象的值。有的时候看来似乎修改了,实际是string经过了特殊处理,每次改变值时都会建立一个新的string对象,变量会指向这个新的对象,而原来的还是指向原来的对象
假设有
string
str1=
"abc"
;那么如果存在有这么一条语句对str1进行再次赋值 如str1=
"123"
,那么,此时指向str1的栈的地址并未发生改变,而是在托管堆里重新创建一个新的对象,其值为123,而str1的栈指向托管堆里123的地址,而原先的abc即将会被垃圾回收机制清理掉。所以要想在函数里改变实参的值必须用
ref
,除对象和集合外。
结论
String是引用类型,只是编译器对其做了特殊处理