首页 > 试题广场 >

请你说说hashCode()和equals()的区别,为什么

[问答题]
请你说说hashCode()和equals()的区别,为什么重写equals()就要重写hashCode()
得分点 hashCode()用途,equals()用途,hashCode()、equals()约定 标准回答 1、hashCode():获取哈希码,equals():比较两个对象是否相等。 2、二者两个约定:如果两个对象相等,它们必须有相同的哈希码;若两个对象的哈希码相同,他们却不一定相等。也就是说,equals()比较两个对象相等时hashCode()一定相等,hashCode()相等的两个对象equqls()不一定相等。 3、加分回答:由于hashCode()与equals()具有联动关系,equals()重写时,hashCode()进行重写,使得这两个方法始终满足相关的约定。
发表于 2022-04-30 11:21:56 回复(4)
得分点: hashCode()用途,equals()用途,hashCode()、equals()约定 标准回答: (1) hashCode()方法的主要用途是获取哈希码,equals()主要用来比较两个对象是否相等。 (2)二者之间有两个约定,如果两个对象相等,它们必须有相同的哈希码;但如果两个对象的哈希码相同,他们却不一定相等。也就是说,equals()比较两个对象相等时hashCode()一定相等,hashCode()相等的两个对象equqls()不一定相等。 加分回答: (1) Object类提供的equals()方法默认是用==来进行比较的,也就是说只有两个对象是同一个对象时,才能返回相等的结果。 (2)实际的业务中,我们通常的需求是,若两个不同的对象它们的内容是相同的,就认为它们相等。 (3)鉴于上述情况,Object类中equals()方法的默认实现是没有实用价值的,所以通常都要重写。 (4)由于hashCode()与equals()具有联动关系,所以equals()方法重写时,通常也要将hashCode()进行重写,使得这两个方法始终满足相关的约定。
发表于 2022-04-30 17:46:48 回复(0)
hashCode()方法的主要用途是获取哈希码,equals()主要用来比较两个对象是否相等。二者之间有两个约定,如果两个对象相等,它们必须有相同的哈希码;但如果两个对象的哈希码相同,他们却不一定相等。
发表于 2022-05-08 11:49:31 回复(0)
hashCode()方法主要用于计算hash值,equals()用于比较是否相等。因为equals()和hashCode()存在联动关系。equals相等成立,hash值一定相等,但是hash值相等,两个对象却不定相等,这就是hash冲突,所以为了解决hash冲突,必须一起重写。
发表于 2022-06-18 16:25:58 回复(0)
hashcode()的用途主要是来获取对象的哈希码,equals方法主要是来判断两个对象是否相等,两者有约定,如果两个对象相等,则他的hashcode的值一定相等,但是hashcode相等,两个对象不一定相等,equals方法默认是比较两个对象的地址是否相同,所以要重写equals,而hashcode是根据对象的内存地址经过哈希算法得来的,如果不重写hashcode,则用重写equals方法比较出来的结果和hashcode比较出来的结果矛盾。因为有约定(equals方法比较的对象相等,则hashcode一定相等)
发表于 2022-07-26 09:07:59 回复(0)
hashCode()获取对象的哈希码值,equals()比较两个对象指向的内存地址是否相同 如果两个对象相等,那么他的hashCode值一定相等,反之则不然。所以equals重写时,也必须要重写hashCode
发表于 2023-03-13 11:02:36 回复(0)
1.hashCode()方法主要用于计算hash值,equals()用于比较是否相等。
2.因为equals()和hashCode()存在联动关系。
3.equals相等成立,hash值一定相等,但是hash值相等,两个对象却不定相等,这就是hash冲突,所以为了解决hash冲突,必须一起重写。
4.二者两个约定: 如果两个对象相等,它们必须有相同的哈希码;若两个对象的哈希码相同,他们却不一定相等
编辑于 2023-02-24 17:01:03 回复(0)
在Java中,有两个约定,equals方法返回true的情况下,hashcode方法一定是相同的。反之hashcode相同,equals不一定为true,
发表于 2022-12-26 21:11:36 回复(0)
hashcode()是比较哈希值,equals()是比较对象地址,看是否为同一个对象。哈希值相等的不一定是同一个对象,但是同一个对象的哈希值一定相等。一般来说我们的需求是看对象的内容是否相等,所以要对equals重写,hashcode和equals具有联动关系(去补课了不懂),所以在重写equals后重写hashcode
发表于 2024-05-12 18:15:46 回复(1)
equals()通常应用场景是:我们希望通过重写euqals来实现根据成员变量的值判断两个不同引用的对象相等,即使他们是不用的对象,然而此时它们的hash值仍然是不同的。所以需要同时重写hashCode()保证hash值相同
发表于 2024-05-11 16:10:14 回复(0)
hasCode方法是得到对象的哈希值,equals方法是比较对象是否相等,当两个对象调用hasCode方法生成的哈希值相同时对象的不一定相等,而equals方法比较相等时那么对象一定相等 从使用哈希集合来说,例如HashSet,每次添加一个对象,都要查看是否有相同的对象,而hasCode方法对于每个类都是特点的,如果不重写该方法,那么两个相等的对象生成的哈希值也不会相同,因此重写hasCode,每次添加对象都先查看是否有相等的哈希值,若有相等的哈希值则再次使用equals方法比较,大大的减少了HashSet集合的比较次数
发表于 2024-05-10 16:41:34 回复(0)
hashCode()是用于测试获取哈希码,equals()用于比较两个对象是否相等,约定是equals()相等时,hashCode()一定相等,而hashCode()相等时,equals()不一定相等;equals()默认是==来进行比较的,如果对其重写后也需要对hashCode()进行重写来满足约定
发表于 2024-04-28 18:46:51 回复(0)
hashCode 是取一个对象的hashCode equals 是比较两个对象。 hashCode 与 equals 的设计实现原则是:如果两个对象相等,则 hashCode 一定相等。 另外 出于使用安全考虑,建议重写。 一般能重写equals方法的都是我们自己建的对象, 这个对象可能要作为 HashMap 的key 来使用, 而HashMap中的 key 的比较逻辑是:hashCode 相同 且 == 或 equals 为 true 。 如果重写equals 而 不重写 hashCode 可能会出现,我们认知上相同的 key 对象在 HashMap 中被判定为不同。
发表于 2024-04-25 21:16:30 回复(0)
首先,equals方法的作用是用于比较两个对象是否相等,一般重写该方法都是用于使用java内置的类库来管理对象,类库调用该方法来比较两个对象是否相等。若是只实现了这个方法,在不使用hashMap等计算hashCode的方法时是足够的,但若是使用了HashMap等需要计算hashCode方法来存储数据的集合后就可能会导致两个相同的数据存了两份的情况,若是为了避免此情况的发生,在没实现hashCode之前,集合若是使用equals来对数据一一比较就会降低性能,将哈希表退化成了线性表,故在我们实现了equals后一般都需要再实现hashCode
编辑于 2024-04-24 23:17:51 回复(0)
两个对象相等,必须有相同的哈希码,但两个哈希码相同,值并不一定相等
编辑于 2024-04-03 09:44:28 回复(0)
hashCode()方法主要用于计算hash值,equals()用于比较是否相等。因为equals()和hashCode()存在联动关系。equals相等成立,hash值一定相等,但是hash值相等,两个对象却不定相等,这就是hash冲突,所以为了解决hash冲突,必须一起重写
编辑于 2024-03-31 18:37:35 回复(0)
答:hashCode()用来获取哈希值,equals用来比较两个对象内容是否相等。 如果两个对象相等,它们肯定有相同的哈希值。但如果两个对象哈希值相同,对象不一定相等。Object类提供的equals方法默认是用==来比较的,也就是只有两个对象是同一个对象时,才能返回相等的结果。而我们实际业务需求中,只需要看重两个对象的内容是否相等,所以一般要重写equals,而由于hashCode()与equals具有联动关系,所以通常要一起重写。
编辑于 2024-03-27 20:24:33 回复(0)
equals()比较两个对象相等时hashCode()一定相等,hashCode()相等的两个对象equqls()不一定相等。 由于hashCode()与equals()具有联动关系,所以equals()方法重写时,通常也要将hashCode()进行重写,使得这两个方法始终满足相关的约定。
发表于 2024-03-20 22:55:46 回复(0)
如果不重写的话,就会出现a.equals(b)这个表达式成立,但是a和b的hashcode不相同,这样就会导致表中两个相同的值存在不同的位置,运用散列表存储时就会产生冲突
发表于 2024-03-20 10:04:38 回复(0)
编辑于 2024-03-05 22:38:21 回复(0)