Microsoft C#字符串文档:我是否误解了我的内容,或者说文档错了?

Ant*_*nio 4 c# string visual-studio-2013

作为C#的新手,我正在阅读一些指南.关于字符串,我在这里阅读(突出显示是我的):

字符串是不可变的 - 在创建对象后,字符串对象的内容无法更改,尽管语法使其看起来好像可以执行此操作.例如,当您编写此代码时,编译器实际上会创建一个新的字符串对象来保存新的字符序列,而变量b继续保持"h".

string b = "h";
b += "ello";
Run Code Online (Sandbox Code Playgroud)

但是尝试下面的代码,它打印"你好".

string b = "h";
b += "ello";
System.Diagnostics.Debug.WriteLine(b);
Run Code Online (Sandbox Code Playgroud)

那么,我是否误解了我所读的内容,或者说文档错了?还有其他选择吗?:)

juh*_*arr 7

很明显,文档是错误的,因为您已经发现后一版本已得到纠正,尽管它也有一些问题(见下文).但我认为一个更好的例子

string b = "h";
string d = b;
d += "ello";
Run Code Online (Sandbox Code Playgroud)

现在b仍然是"H",因为+=没有更新的参考,但创建一个新的stringd引用.

另外需要注意的是strings,此代码中有3个.首先是string文字"h",然后是string文字"ello",最后是string"hello",它是从前两个连接中创建的.因为所有string文字都是实习的,并且实习字符串不是垃圾收集的string,所以最终有资格进行垃圾收集的3个中唯一的是当前引用的"hello" d.虽然可以关闭string实习,但在这种情况下,所有三个最终都有资格进行垃圾收集.