java重写equals 为什么需要重写hashcode

 每个覆盖equals方法的类中,必须覆盖hashCode 方法,如果不这样的话,会违反Object.hashCode 的通用约定。从而导致该无法结合所有散列的集合一起正常工作,这样的集合有HashSet,HashMap,HashTable

摘自Object规范

1.在应用程序的执行期间只要对象的equals方法的比较操作所用的的信息没有被修改,那么对于同一个对象调用多次hashCode方法必须始终如一的返回同一个整数。在同一个应用程序的对此执行过程中,每次执行返回的整数可以不一样。

2.如果两个对象的equals方法相等,那么调用两个对象的任意一个hashCode都要返回同样的整数。

3.如果两个对象的equals 方法不相等,那么调用这两个对象的任意hashCode值不一定不相等。

猜你喜欢

转载自xbyy123.iteye.com/blog/2338447