网上看到java的解释 主要原因是默认从Object继承来的hashCode是基于对象的ID实现的。
如果你重载了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样。
这样,当你用其中的一个作为键保存到hashMap、hasoTable或hashSet中,再以“相等的”找另一个作为键值去查找他们的时候,则根本找不到。
——而这是反直觉的,因为“我要找的就是那个相等的对象,他明明在,我却找不到”;
C#与java 类似:
CA2218:重写 Equals 时重写 GetHashCode
GetHashCode 基于适合哈希算法和诸如哈希表的数据结构的当前实例返回一个值。两个相等的同类型对象必须返回相同的哈希代码,才能确保以下类型的实例正确运行: