每个覆盖equals方法的类中,必须覆盖hashCode 方法,如果不这样的话,会违反Object.hashCode 的通用约定。从而导致该无法结合所有散列的集合一起正常工作,这样的集合有HashSet,HashMap,HashTable
摘自Object规范
1.在应用程序的执行期间只要对象的equals方法的比较操作所用的的信息没有被修改,那么对于同一个对象调用多次hashCode方法必须始终如一的返回同一个整数。在同一个应用程序的对此执行过程中,每次执行返回的整数可以不一样。
2.如果两个对象的equals方法相等,那么调用两个对象的任意一个hashCode都要返回同样的整数。
3.如果两个对象的equals 方法不相等,那么调用这两个对象的任意hashCode值不一定不相等。