为啥 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等三个方法

object.Equals与object.ReferenceEquals方法

Object,equals,toString

数组声明和使用要点

java中,父类Object的“equals()方法”和“==”效果是否一样的?