在很多情况下,如果覆写了equals方法,但是未覆写hashCode话,会导致错误发生。而这种错误发生debug是很困难的。如果未覆写hashCode的话,那么HashMap,HashSet,HashTable集合类将会有很大的问题。
对于hashCode有这样的规约:
1. 如果一个对象的equals作比较并且该对一直未被修改的话,那么该对象返回的hashCode一定是一样的在运行期间。当然hashCode在不同的机器、不同的运行期间是可以不同的。
2. 如果两个对象通过equals方法对比是相等的话,那么其hashCode也必然相等;如果两个对象通过equals不相等的话,那么其hashCode也必然不等。
当覆写hashCode方法的时候,不要指望通过排除计算hashCode的一步的域方式来提高性能。否则的话,会导致hashCode范围很小,分布的链会很长,在查找的时候会很慢。
总之,如果两个对象通过equals方法比较相等的话,请记住一定要覆写hashCode方法。