string s1 = "t";
string s2 = 't'.ToString();
Console.WriteLine(s1.Equals(s2)); // returning true
Console.WriteLine(object.Equals(s1, s2)); // returning true
ここでは同じ結果が返されます。今私がStringBuilderを使用しているとき、同じ値を返さない。根底にある理由は何ですか?なぜobject.Equalsとinstanceobject.Equalsが同じでないか
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)'とは異なる振る舞いを持つことは直感的ではないようです。 – leppie