为啥 Object.Equals(new Object(), new Object()) 是假的?
Posted
技术标签:
【中文标题】为啥 Object.Equals(new Object(), new Object()) 是假的?【英文标题】:Why is Object.Equals(new Object(), new Object()) false?为什么 Object.Equals(new Object(), new Object()) 是假的? 【发布时间】:2012-06-02 11:06:47 【问题描述】:为什么下面这段代码是false
?
Object.Equals(new Object(), new Object())
【问题讨论】:
【参考方案1】:来自MSDN
Equals 的默认实现支持引用相等 引用类型和值类型的按位相等。参考 相等意味着被比较的对象引用引用 同一个对象。按位相等意味着被比较的对象有 相同的二进制表示。
换句话说,您正在创建两个相同类型的不同对象,并查看它们是否是完全相同的对象,而事实并非如此。
【讨论】:
【参考方案2】:根据MSDN Documentation:
Equals 的默认实现支持引用类型的引用相等,以及值类型的按位相等。 引用相等意味着被比较的对象引用引用同一个对象。按位相等意味着被比较的对象具有相同的二进制表示。
请注意,派生类型可能会覆盖 Equals 方法以实现值相等。值相等意味着被比较的对象具有相同的值但不同的二进制表示。
您正在创建两个不同的对象。
【讨论】:
以上是关于为啥 Object.Equals(new Object(), new Object()) 是假的?的主要内容,如果未能解决你的问题,请参考以下文章
C# 运算符 ==、StringBuilder.Equals、Object.Equals 和 Object.ReferenceEquals 之间的区别
浅析Object基类提供的Virtual Object.Equals, Static Object.Equals and Reference.Equals等三个方法