这种问题十分重要,一旦在面试中被问到,说不清楚会大大降低面试官的印象,直接放答案
hashcode()和equals()都是用于比较两个对象是否相等。
在一些容器(hashmap和hashset)中,有了hashcode()之后判断元素是否在对应容器中效率会更高。以hashset举例。
当你要把对象放入hashset中时,hashset会计算hashcode值来判断对象加入的位置,同时也会与其他已经加入的对象的hashcode值做比较,如果没有相同的hashcode,hashset会假设对象没有重复出现。但是如果发现有相同的hashcode对象,这时还不能判断是否一定相同,调用equals()方法来检查hashcode相等的对象是否真的相同。如果两者相同,hashset就不会让其加入操作成功。如果不同的话,就会重新散列到其他位置。这样我们就大大减少了equals的次数,相应就大大提高了执行速度。
总结:
equals 方法判断两个对象是相等的,那这两个对象的 hashCode 值也要相等。
两个对象有相同的 hashCode 值,他们也不一定是相等的(哈希碰撞)。