Рассмотрим следующий фрагмент кода.
object str = new string(new char[] { 't', 'e', 's', 't' });
object str1 = new string(new char[] { 't', 'e', 's', 't' });
Console.WriteLine(str==str1); // false
Console.WriteLine(str.Equals(str1)); // true
Я понимаю, что оператор равенства работает здесь, что, поскольку мы неявно бросаем объект, оператор равенства проверяет ссылки обоих, если они равны и возвращает false.
Но я запутался во втором, возвращая true, похоже, что он вызывает реализацию переопределения Equals, предоставляемую типом String, и проверяет содержимое строки, если они равны.
Мой вопрос в том, почему он не проверяет равномерность контента для оператора, а их фактический тип - это строка, а не объект. прав?
в то время как следующий код выводит для обоих:
object str = "test";
object str1 = "test";
Console.WriteLine(str==str1); // true
Console.WriteLine(str.Equals(str1)); // true