为什么StringBuilder.Equals在这种情况下返回"true"?

are*_*mes 3 c# string stringbuilder equals equals-operator

我在比较C#(XNA)中的两个StringBuilder时遇到了一个小问题.

StringBuilder sb1;
StringBuilder sb2;
Run Code Online (Sandbox Code Playgroud)

两者都在我的代码的不同部分初始化.一个简单的Console.WriteLine显示它们包含相同的文本.但是,以下是错误的:

sb1.Equals(sb2); // This is false
Run Code Online (Sandbox Code Playgroud)

然而以下是真实的

sb1.ToString().Equals(sb2.ToString); // This is true
Run Code Online (Sandbox Code Playgroud)

怎么会发生这种情况?

Sel*_*enç 7

因为string类重写Equals方法,因此字符串通过值而不是引用进行比较.

查看文档:

虽然string是引用类型,但是定义了相等运算符(==和!=)来比较字符串对象的值,而不是引用.

它讨论==!=运算符,但它们实际上是调用string.Equals它并按值比较字符串.