java,equals()和hashCode()这两个方法是谁的,为什么必须覆盖?
答案:2 悬赏:30
解决时间 2021-03-21 08:05
- 提问者网友:宿醉何为情
- 2021-03-20 17:36
如题,看书看到集合,遇到这个问题,请详细解答!
最佳答案
- 二级知识专家网友:迷人小乖乖
- 2021-03-20 18:23
是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类需要覆盖这两个方法,
没有说必须要覆盖这两个方法。
但是如果覆盖了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类需要覆盖这两个方法,
全部回答
- 1楼网友:开心就好
- 2021-03-20 19:51
是最终父类object的,
equals()是用来拿自己和别的对象做对比用的,
hashcode()是返回的对象的地址值
详细请阅读:http://www.cnblogs.com/return/archive/2009/11/06/1597611.html
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |