当两个字符串值都是“1.25”时,s1 == s2的计算结果为false

时间:2015-07-30 18:14:12

标签: c#

我今天早些时候遇到了一个奇怪的问题。我正在比较两个字符串,而==运算符正在评估falses1.Equals(s2)函数将评估为true

是什么导致了这种行为?

感谢。

1 个答案:

答案 0 :(得分:3)

您可能会与错误的运算符重载进行比较:operator == (object a, object b)而不是operator == (string a, string b)

默认的==运算符检查引用相等性,但如果两个操作数都是string类型的表达式,则使用string重载,并比较字符串相等性。

如果其中一个操作数是{em>不的string类型,则编译器将选择operator == (object a, object b)重载。

以下代码将重现该问题:

object a = "foo";
object b = "FOO".ToLowerInvariant(); // Avoid string interning
Console.WriteLine(a == b); // False

此代码确保创建两个相同的字符串,这些字符串不相等。如果我使用"foo"作为b的值,则两个对象都将指向相同的引用,并且引用相等性比较将返回true