string s1 = "t";
string s2 = 't'.ToString();
Console.WriteLine(s1.Equals(s2)); // returning true
Console.WriteLine(object.Equals(s1, s2)); // returning true
Hier wird das gleiche Ergebnis angezeigt. Nun, wenn ich mit StringBuilder ist es nicht den gleichen Wert zurück. Was ist der Grund dafür?
StringBuilder s1 = new StringBuilder();
StringBuilder s2 = new StringBuilder();
Console.WriteLine(s1.Equals(s2)); // returning true
Console.WriteLine(object.Equals(s1, s2)); // returning false
Bearbeiten1 : Meine obige Frage wird unten beantwortet. Aber während dieser Diskussion, was wir herausfinden, StringBuilder hat keine Überschreibung Equals Methode in seiner Implementierung. Wenn wir also StringBuilder.Equals aufrufen, geht es tatsächlich zu Object.Equals. Wenn also jemand StringBuilder.Equals und S1.Equals(S2) aufruft, wird das Ergebnis unterschiedlich sein.
1 Stimmen
Gut gefangen! Unterm Strich,
StringBuilder
scheint zu vergessen, dieEquals(object)
. Es scheint kontraintuitiv zu sein, dassEquals(StringBuilder)
mit einem anderen Verhalten alsEquals(object)
.