В следующем примере третья оценка возвращает false, все хорошо, но четвертый пример возвращает true..
Однако я не совсем понимаю, как это работает, по умолчанию Object.Equals
сравнивает две ссылки на предмет равенства объектов и видит как a
и b
оба указывают на уникальный экземпляр строки, это должно возвращать false, что и происходит в третьем примере, но не в четвертом.
Теперь я понимаю, почему он возвращает true во втором примере, поскольку метод .Equals()
переопределен. в классе string, но в четвертом примере мы приводим эту строку как объект.
Так не будет ли в данном случае вызываться Object.Equals
?
static void Main()
{
// Create two equal but distinct strings
string a = new string(new char[] {'h', 'e', 'l', 'l', 'o'});
string b = new string(new char[] {'h', 'e', 'l', 'l', 'o'});
Console.WriteLine (a == b); // Returns true
Console.WriteLine (a.Equals(b)); // Returns true
// Now let's see what happens with the same tests but
// with variables of type object
object c = a;
object d = b;
Console.WriteLine (c == d); // Returns false
Console.WriteLine (c.Equals(d)); // Returns true
}