黑马程序员技术交流社区

标题: 为什么覆写equals 方法必须覆写hashCode方法? [打印本页]

作者: KevinSmart    时间: 2014-5-30 21:19
标题: 为什么覆写equals 方法必须覆写hashCode方法?
本帖最后由 KevinSmart 于 2014-6-1 09:27 编辑

为什么覆写equals 方法必须覆写hashCode方法?
作者: 饥渴ing    时间: 2014-5-31 00:56
不是必须要覆写hashCode 方法,覆写hashCode方法是为了维护hashCode 的常规协定.
作者: 提菩--空    时间: 2014-5-31 01:39
对象的引用地址是一个哈希值。而这个哈希值是通过hashcode方法返回确定。那判断对象相等,首先会先判断对象的哈希值 。hashcode相同后,才会去调用equals方法,这是一个先后顺序。也就是说如果涉及到hash结构对象的操作,那么得复写equals和hashcode。如果不涉及hash结构的话,那么hashcode就没有必要复写。
作者: More    时间: 2014-5-31 06:24
这就是一个规定  要去遵守而已,就像toString()方法要进行覆盖一样
作者: KevinSmart    时间: 2014-5-31 20:07
提菩--空 发表于 2014-5-31 01:39
对象的引用地址是一个哈希值。而这个哈希值是通过hashcode方法返回确定。那判断对象相等,首先会先判断对象 ...

讲的很好,谢谢分享
作者: 饥渴ing    时间: 2014-6-1 00:17
提菩--空 发表于 2014-5-31 01:39
对象的引用地址是一个哈希值。而这个哈希值是通过hashcode方法返回确定。那判断对象相等,首先会先判断对象 ...

哥们扯着蛋了首先对象引用地址存的是对象的首地址而不是哈希值(你可以创建2个同样内容的String对象用=比较)equals方法不会先掉用hashCode方法hashMap和hashSet判断唯一才会先判断hashCode在判断equals方法。你如果覆写了equals方法要保证两对象相同时hashCode结果也该相同
作者: 提菩--空    时间: 2014-6-1 01:07
饥渴ing 发表于 2014-6-1 00:17
哥们扯着蛋了首先对象引用地址存的是对象的首地址而不是哈希值(你可以创建2个同样内容的String对象用=比 ...

确实扯到蛋了,对象的引用确实是保存的对象内存地址中的首地址。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2