jdk规范中说道,如果要实现自己的equals()方法,则也需要实现相应的hashCode()方法。为什么?这是为了避免在HashMap等hash类使用时出现异常。当然,jdk也不会强制要求你这么做,它只是告诉你,不这么做,出了什么问题,别找它!
所以,一般来讲,A.equals(B) == true 则可以推出 A.hashCode() == B.hashCode(),但是反过来就不行了。因为,两者的hashCode相同并不能推出他们的内容相同!这是一个原则问题。
比如 A.hashCode() == B.hashCode(),但是,A.equals(B) == false ,那么放入HashMap中时就会发生冲突。比如用拉链法,则A 和 B将会映射到同一个链表中。但是,匹配的时候,C.hashCode() 和A、B的相等,C的内容和B相等,那么最后匹配上的就是B,而不会是A!