代码改变世界

c#的string --> 一个被编译器做特殊处理的引用类型

2020-01-02 11:53  石吴玉  阅读(241)  评论(0编辑  收藏  举报

String的不变性

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

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

结论

String是引用类型,只是编译器对其做了特殊处理