【发布时间】:2012-04-03 13:43:24
【问题描述】:
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)具有不同的行为似乎违反直觉。
标签: c# string stringbuilder