c # of string -> is a special treatment compiler reference type

String invariance

C#里string对象是不变对象(只读),因为一旦创建了该对象,就不能修改该对象的值。有的时候看来似乎修改了,实际是string经过了特殊处理,每次改变值时都会建立一个新的string对象,变量会指向这个新的对象,而原来的还是指向原来的对象

假设有string str1="abc";那么如果存在有这么一条语句对str1进行再次赋值 如str1="123",那么,此时指向str1的栈的地址并未发生改变,而是在托管堆里重新创建一个新的对象,其值为123,而str1的栈指向托管堆里123的地址,而原先的abc即将会被垃圾回收机制清理掉。所以要想在函数里改变实参的值必须用ref,除对象和集合外。

in conclusion

String is a reference type, but its compiler to do a special treatment

Guess you like

Origin www.cnblogs.com/yxcn/p/12132202.html