java,equals()和hashCode()这两个方法是谁的,为什么必须覆盖?

如题,看书看到集合,遇到这个问题,请详细解答!
2024-12-03 04:40:45
推荐回答(2个)
回答1:

是Object类的。java中所有类都是Object的子类。
没有说必须要覆盖这两个方法。
但是如果覆盖了equals()方法的话,则必须要覆盖hashCode()方法。(这才是关键)
在Object类中定义了hashCode()和equals()方法,Object类的equals()方法按照内存地址比较对象是否相等,因此如果 object1.equals(object2)为true,表明object1变量和object2变量实际上引用同一个对象,那么object1和 object2的哈希码肯定也相同,也就是说object1.hashCode()==object2.hashCode()

如果用户定义的类覆盖了Object类的equals()方法,但是没有覆盖Object类的hashCode()方法,就会导致当 object1.equals(object2)为true 时,而 object1 和 object2的哈希码不一定一样。
所以如果覆盖了equals()方法,也应该覆盖hashCode()方法,并且保证2个相等的object对象的哈希码也一样

如果覆盖了hashCode()方法,可以不用覆盖equals()方法。
可以两个方法都不覆盖。
如果楼主使用hibernate的saveOrUpdate方法的话,pojo类需要覆盖这两个方法,

回答2:

equals是比较字符的,但是hashCode都说是散列码/