当前位置: 首页 > 面试题库 >

为什么我们需要重写java中的equals和hashcode以及为什么不能使用Object类实现

施弘壮
2023-03-14
问题内容

伙计们,请让我知道,在现实世界中,为什么我们需要重写equals和hashcode而不能使用Object的equals和hashcode。


问题答案:

对象的equals / hashcode实现很好-如果您希望“引用身份”作为相等性。换句话说,一个对象总是会比较等于自己,但不同于另一个对象。

但是,如果希望两个不同的对象相等,则必须重写该方法以 说明 它们应 如何 相等(然后重写哈希码以使其与之保持一致)。

最简单的示例可能是String。两个具有相同字符的不同字符串相等,这对于它们相等非常 有用

String x = new String(new char[]{'a', 'b', 'c'});
String y = new String(new char[]{'a', 'b', 'c'});
System.out.println(x.equals(y)); // Prints true

现在将其与FileInputStream-什么会使两个FileInputStreams相等?如果他们正在读取同一文件?文件中的位置呢?两个流到具有相同内容的不同文件的流又如何呢?问这个问题,IMO真的没有多大意义。

现在,Object实现如何知道所需的行为FileInputStream和之间的区别String?它 可能
会注意到添加到字段,属性和类型本身的注释,可能会自动生成适当的字节码,然后可以对其进行JIT编译……但是,当然Java早在可用注释之前就出现了。当前的方法非常简单-
但这确实意味着,如果要为不同的对象实现值相等,则需要自己编写代码。

需要注意的一点是,对于不可变类型,通常通常更容易考虑相等性-如果两个对象在某个时间点相等,然后在以后不相等,这很奇怪。这也可能会严重破坏哈希表-
哈希码应基本上取决于对象的各个方面,这些方面考虑是否相等,并且在首次将密钥添加到哈希表时记录哈希码;如果您随后 更改
键的内容,则其哈希码将更改,但哈希表将不知道它。



 类似资料:
  • 问题内容: 在java中为什么需要覆盖equals和hashcode方法?什么时候用到? 问题答案: 让我们尝试通过一个示例来理解它,如果我们不进行覆盖而覆盖并尝试使用。 假设我们有一个类像这样那样的两个对象是相等的,如果他们等于(和生成) 仅覆盖 如果仅覆盖被覆盖,则在你第一次调用时将散列到某个存储桶,而在调用时将散列到其他存储桶(因为它们具有不同的)。因此,尽管它们是相等的,但由于它们没有散列

  • 本文向大家介绍请你解释为什么重写equals还要重写hashcode?相关面试题,主要包含被问及请你解释为什么重写equals还要重写hashcode?时的应答技巧和注意事项,需要的朋友参考一下 考点:java基础 HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址,这样即便有相同含义

  • 本文向大家介绍hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?相关面试题,主要包含被问及hashCode 与 equals ?为什么重写equals时必须重写hashCode方法?时的应答技巧和注意事项,需要的朋友参考一下 面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” ha

  • 为什么我需要重写Hash Mapp中的值直接访问。也就是说,如果按照下面的hashmap将数据插入到hashmap中,我可以通过将键作为整数来获得值,将对象作为值来获得值。在这种情况下,是否需要重写equals()和hashCode()方法?请给出建议。

  • 问题内容: 我开始使用RxJS,但我不明白为什么在此示例中我们需要使用类似or 的函数;数组的数组在哪里? 如果有人可以直观地解释正在发生的事情,那将非常有帮助。 问题答案: 当您有一个Observable的结果是更多Observable时,可以使用flatMap。 如果您有一个由另一个可观察对象产生的可观察对象,则您不能直接过滤,缩小或映射它,因为您有一个可观察对象而不是数据。如果您生成一个可观

  • 问题内容: 我一直在研究,发现从2.1开始就可以使用实体图。 但是我还不了解实体图的优点。 我知道使用实体图的优点之一是我们只能在整个实体中指定要获取的数据,但是如果我们要整个实体,还有其他理由使用实体图吗?还是仅在要检索部分数据时才应使用实体图? 当我们使用实体图时,它还有其他目的或优点,我想知道。 问题答案: 在Jpa中,休眠与关联关系一直是性能的问题。 一次又一次地在事务中延迟加载关联会导致