我在一本书中看到了这句话:
"Equals()的默认实现是由System.Object定义的,它使用.NET标识进行比较。"
.Net标识是否指分配给引用类型和值类型的内存中的内存地址?
Equals 的默认实现对于引用类型支持引用相等性,对于值类型支持按位相等性。引用相等性意味着被比较的对象引用引用了同一个对象。按位相等性意味着被比较的对象具有相同的二进制表示。
这回答了你的问题吗?
http://msdn.microsoft.com/en-us/library/bsc2ak47(v=vs.80).aspx
Equals 的默认实现仅支持引用相等性,但派生类可以重写此方法以支持值相等性。
对于引用类型,相等性被定义为对象相等性;也就是说,引用是否指向同一对象。对于值类型,相等性被定义为按位相等。ValueType 类支持值类型。
因此,对于引用类型,除非它们重写了 Equals
,否则将比较引用 - 即“这是否引用同一对象”。对于值类型,将比较整个值。
如果两个类的实例是同一个实例(相同的内存位置),则它们是“相同的”。
默认实现在我看来调用了 Object.ReferenceEquals
。
如果两个结构的值全部相等,即它们是按位相同的,则它们是“相同的”。
默认实现在我看来使用反射来比较所有成员。
但是,这两种行为都可以使用 Equals
方法进行重写。