相关疑难解决方法(0)

为什么在重写Equals方法时重写GetHashCode很重要?

鉴于以下课程

public class Foo
{
    public int FooId { get; set; }
    public string FooName { get; set; }

    public override bool Equals(object obj)
    {
        Foo fooItem = obj as Foo;

        if (fooItem == null) 
        {
           return false;
        }

        return fooItem.FooId == this.FooId;
    }

    public override int GetHashCode()
    {
        // Which is preferred?

        return base.GetHashCode();

        //return this.FooId.GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经覆盖了该Equals方法,因为它Foo代表了Foos表的一行.哪个是覆盖的首选方法GetHashCode

覆盖为什么重要GetHashCode

c# overriding hashcode

1371
推荐指数
13
解决办法
35万
查看次数

为什么我不能只比较两个对象的 hashCode 来确定它们是否相等?

为什么Eclipse实现的equals方法要比较每个值,只比较两个对象的hashCode不是更简单吗?

据我所知:

  • hashCode 总是为相同的输入生成相同的哈希值
  • 因此,如果两个对象相等,它们应该具有相同的哈希值
  • 如果相等的对象具有相同的哈希值,我可以检查哈希值以确定对象是否相等

编辑:相关问题,如果 equals 实际上不需要 hashCode,为什么在实现 equals 时总是实现 hashCode?

java hash equals hashcode

1
推荐指数
1
解决办法
1290
查看次数

标签 统计

hashcode ×2

c# ×1

equals ×1

hash ×1

java ×1

overriding ×1