c# - 对象相等在 .NET 中的行为不同

标签 c# .net

我有这些声明,他们的结果就在附近。

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 时,运算符被重载以测试值相等性使用引用相等性。

cd当您使用 Equals 时, 字符串在km ,使用了重载方法。

c == dtrue由于上述原因 - 在 string 上使用了值相等运算符重载时的类型。

关于c# - 对象相等在 .NET 中的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10176737/

相关文章:

c# - 如何将我的页面与 C# View 子文件夹中的 xmls 连接

c# - 我怎样才能做出无条件断言

.net - 您是否仍需要处理 .net v4 System.Net.Mail 中的附件?

javascript - 单击按钮时发出警报

c# - 阻止弹出式 Visual Studio

javascript - 在 ASP.net 中调用 Web 服务

c# - 在类库中实例化 CaSTLe Windsor 容器时的最佳实践是什么?

c# - 如何理解 "Contract"的含义

.net - 用单行求和 TimeSpan 数组?

c# - WebClient DownloadData 方法卡住 Form