string s1 = "t";
string s2 = 't'.ToString();
Console.WriteLine(s1.Equals(s2)); // returning true
Console.WriteLine(object.Equals(s1, s2)); // returning true
Здесь он возвращает тот же результат. Теперь, когда я использую StringBuilder, он не возвращает то же значение. Что скрывается под причиной?
StringBuilder s1 = new StringBuilder();
StringBuilder s2 = new StringBuilder();
Console.WriteLine(s1.Equals(s2)); // returning true
Console.WriteLine(object.Equals(s1, s2)); // returning false
Edit1: ответ на мой вышеупомянутый вопрос приведен ниже. Но во время этого обсуждения мы выяснили, что StringBuilder не имеет в своей реализации переопределяющего метода Equals. Поэтому, когда мы вызываем StringBuilder.Equals, он фактически переходит в Object.Equals. Поэтому, если кто-то вызовет StringBuilder.Equals и S1.Equals (S2), результат будет другим.
StringBuilder
, похоже, забыл переопределитьEquals(object)
. Кажется нелогичным иметьEquals(StringBuilder)
поведение, отличное отEquals(object)
. - person leppie   schedule 19.03.2012