我尝试使用等于运算符 ' == ' 比较两个 int 值和两个字符串值。我使用了 3 个函数,它们的输入参数类型为 dynamic、object 和 int/string。当我使用字符串参数进行比较时,似乎在所有 3 种情况下使用 ' == ' 运算符都会返回正确的答案。使用 int 类型时,在对象输入类型参数的情况下,即使 2 个 int 值相等,它也会返回 false。我知道 ' == ' 运算符,在对象的情况下,它比较 2 个对象在内存中是否具有相同的引用,因此这可以解释为什么我收到 false。但我不明白为什么在字符串类型的情况下它工作得很好。
代码:
public static bool CompareD(dynamic a, dynamic b)
{
return a == b;
}
public static bool CompareO(object a, object b)
{
return a == b;
}
public static bool CompareS(int a, int b)
{
return a == b;
}
我期待当我使用字符串时,在对象类型输入参数的情况下,即使这两个字符串相等,也会收到 false,就像 int 一样,但我收到了正确的答案。
这可能是因为字符串是不可变的。实现这一点的代码在 String 类中。它看起来像这样:
public static bool operator ==(string a, string b)
{
return string.Equals(a, b);
}
因此,任何“==”比较都将检查相等性而不是字符串上的引用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句