我有这些声明,他们的结果就在附近。
string a = "abc";
string b = "abc";
Console.Writeline(a == b); //true
object x = a;
object y = b;
Console.Writeline(x == y); // true
string c = new string(new char[] {'a','b','c'});
string d = new string(new char[] {'a','b','c'});
Console.Writeline(c == d); // true
object k = c;
object m = d;
Console.Writeline(k.Equals(m)) //true
Console.Writeline(k == m); // false
为什么最后一个平等给了我 false ?
问题是为什么(x == y)为真(k == m)为假
最佳答案
对于字符串,==
使用 object
时,运算符被重载以测试值相等性使用引用相等性。
自 c
和 d
当您使用 Equals
时,是 字符串在k
和 m
,使用了重载方法。
和c == d
是true
由于上述原因 - 在 string
上使用了值相等运算符重载时的类型。
关于c# - 对象相等在 .NET 中的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10176737/