由于字符串在 dotnet 中是引用类型,所以当我们更新 变量 x 时,y 的值也应该更新(因为它引用了 x 的值)。下面是一个示例程序,说明当更新 x 的值时,y 的值为什么不会改变?
public void assignment()
{
string x= "hello";
string y=x; // referencing x as string is ref type in .net
x = x.Replace('h','j');
Console.WriteLine(x); // gives "jello" output
Console.WriteLine(y); // gives "hello" output
}
StringBuilder
而不是string
,并且疑问所在的那行代码是x = null;
- 这不会使y
为 null。) - Jon SkeetStringBuilder.Replace
会改变自身并返回自身,所以x = x.Replace(...)
将同时更改y
中的值。 - CharliefaceReplace
的原因。假设string
实际上是可变的,但Replace
具有其当前行为,即返回一个新字符串而不是修改现有字符串。 (例如,可能会有一个ReplaceInExistingObject
方法来改变它。)这个问题的行为根本不会改变。 - Jon Skeet