首页 > 试题广场 >

请你说说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()一定相等,而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)
1.hashCode()方法是获取哈希码,equals()方法主要用来比较两个对象是否相等, 2.两者之间的约定:两个对象相等必须有相等的hashCode,但是hashCode相等的两个对象的equals()不一定相等 Object类默认提供的equals()方法是用==来实现的,只有两个对象是同一个对象时,才会返回true,实际业务中,我们通常比较的是两个对象的内容是否相同,我们通常要重写equals方法和hashCode()方法来满足日常需求
发表于 2024-03-05 11:28:38 回复(0)
hashCode():作用是获取哈希值 equals():比较两个对象是否相等 二者约定:两个对象相等,要有相同的哈希码 ;两个对象的哈希值相等,但他们不一定相等
编辑于 2024-02-28 16:24:38 回复(0)
hashCode用途是获得是哈希码,equals是比较两个对象的值。 如果两个对象的值想等,哈希码一定相同,反之不一定。 二者约定,因为object提供默认的equals方法是用==比较的,要两个对象是同一个对象才回返回true,但是实际上一般两个对象内容相同就可以相等,所以equals会根据业务重写,因为联动关系,hashCode也会重写
编辑于 2024-02-26 17:02:49 回复(0)