C#operator ==,StringBuilder.Equals,Object.Equals和Object.ReferenceEquals之间的差异

ami*_*bha 26 c# stringbuilder object referenceequals equals-operator

我有一个关于Object.Equals和的问题Equals(object).我的示例代码如下:

class Program
{
    static void Main(string[] args)
    {
        var sb1 = new StringBuilder("Food");
        var sb2 = new StringBuilder("Food");
        Console.WriteLine(sb1 == sb2);
        Console.WriteLine(sb1.Equals(sb2));
        Console.WriteLine(Object.Equals(sb1, sb2));
        Console.WriteLine(Object.ReferenceEquals(sb1, sb2));
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

False
True
False
False
Run Code Online (Sandbox Code Playgroud)

但就我Object.Equals(sb1, sb2)内心的 问题而言sb1.Equals(sb2),为什么会给出两个不同的结果?

Kob*_*obi 17

你错过了另一个测试:

Console.WriteLine(sb1.Equals((object)sb2)); // False!
Run Code Online (Sandbox Code Playgroud)

StringBuilder不会覆盖Equals(object),它会使用另一个重载Equals(StringBuilder).

Object.Equals(object, object)正在调用Equals(object),所以结果是假的.