use*_*658 10 java equals hashcode
我的同事压倒了这个equals()
方法.我的回答是,你是否也覆盖了这个hashCode()
方法?他的回答是因为我们不会使用哈希映射或哈希集,如果我们覆盖它应该不重要hashCode()
.那是对的吗?
ass*_*ias 14
是的,事实上他是正确的 - 但是,如果你需要在某天将对象放在基于散列的集合中,你将不得不在任何地方添加哈希码,这可能很烦人+那天你可能会错误地实现你的哈希码(即不一致)等于)因为你错过了equals方法中的一些微妙之处......
考虑到大多数IDE提供了auto equals/hashcode生成功能,我认为没有理由不创建它们.
查看它的另一种方法是:当您从父类重写方法时,您应该遵循该父类定义的契约.在Object的情况下,equals的javadoc非常清楚:
请注意,通常需要在重写此方法时覆盖hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等对象必须具有相等的哈希代码.
因此,除非您有真正的设计理由不覆盖哈希码,否则默认决策应该是遵循父类合同并覆盖其中之一或两者.
归档时间: |
|
查看次数: |
4474 次 |
最近记录: |