C# 为什么 string
类型的参数在方法体内被修改不会影响到原来的变量值?
🏷️ C#
string
参数是直接传递原来变量的地址? 还是重新拷贝了一个字符串然后传递这个新字符串的地址?
应该是直接传递原来变量的地址, 这种情况又是如何实现改变字符串的值 但又不影响原来的变量?
是不是跟字符串的改变机制有关? 字符串的改变并不是直接在原来的堆地址上直接修改, 而是重新在堆上保存改变后的值.
string
类型是引用类型, 所以传递的是 string
类型的引用.
注意
常说的按引用传递其实是 以值传递的方式传递变量的引用, 并不是真正的按引用传递.
但是 string
的参数传递具有一些值传递的特性 (在方法体内改变变量值不会影响原来的值), 这是由于字符串类型的特殊性导致的.
字符串创建后不能再被改变;
改变字符串变量值时会创建新的字符串, 然后把变量指向新的地址, 原来的字符串并不会改变; 并且由于 字符串池机制, 之前的字符串并不会被释放;