Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值
所以有:
如果两个对象的equals()是true, 那么这两个对象的hashCode就一定相等。
列如:a.equals(b)==true 就一定会有 a.hashCode()==b.hashCode();
反之,两个对象的hashCode相同,他们不一定会equals()==true
注意:
有些设计需要重写equals(),重写equals()时,最好同时重写hashCode()
因为在HashSet、HashMap以及HashTable这些中,一般是先判断列表中是否有hashCode,如果有才会用equals()判断是否相等的。
hashCode没有重写,如果在第一步判断就失败了,equals()就不会判断了。
所以:
equals方法和hashCode方法始终在逻辑上保持一致性
结论:
如果两个对象相等,那么他们的hashCode一定相同
如果两个对象的hashCode不相同,那么两个对象就一定不相等
如果两个对象的hashCode相同,两个对象也不一定相等。