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

什么时候应该覆盖Equals函数?

潘雅珺
2023-03-14
问题内容

我应该equals为我创建的任何类重写函数吗?

即使是非常简单的类只包含一些非常简单的属性,并通过 平等 ,我需要它的每一个属性是一样的吗?


问题答案:

我应该为我创建的任何类重写equals函数吗?

equals当(且仅当)对象“表示某些数据”(即,如果它对PersonCarRecipieIngredient(例如,这些通常以集合等结尾))进行建模时,覆盖。不要覆盖其他类型的类的equals,例如LoginServletDatabaseUtil

请记住,hashCode无论何时重写,都应始终重写equals

(一个自然的后续问题:) 如果我不重写equals和hashCode会怎样?

除非它们是完全相同的对象,否则任何两个对象都将被视为 不相等

[…]我需要它的每个属性都相等吗?

通常 。这取决于 如何定义平等概念。请注意,对于引用类型,在实现自己的对象时,可以重用/委托
对象的实现equals(和hashCode)。



 类似资料:
  • 问题内容: 如果我有 如果我比较A的2个实例但没有覆盖equals方法,是否可以获得预期的结果? 问题答案: 如果我比较A的2个实例但没有覆盖equals方法,是否可以获得预期的结果? 这取决于您的期望:) 默认实现将为您提供 引用相等性-换句话说,当您比较两个引用时,仅当它们是对同一对象的引用时才返回true。 通常,您将重写以实现“值相等”,在这种情况下,两个不同的对象通常被认为具有相等的字段

  • 问题内容: 好的,我从很多地方和来源都听说过,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。但是请考虑以下代码 这里的输出为true,完全按照我想要的方式为false,我根本不关心重写hashCode()方法。这意味着hashCode()覆盖是一种选择,而不是每个人都说的强制性选择。 我想要第二次确认。 问题答案: 它对您有用,因为您的代码未使用任何需要API的功能(Ha

  • 我想知道为什么我们不应该重写非虚拟函数?

  • 问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮​​助。但是,在发送流数据时,等待A

  • 问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或

  • 问题内容: 刚开始使用Javascript / jQuery时,我被告知要使用document.ready,但我从未真正了解原因。 有人可能会提供一些基本准则,说明何时在jQuery的内部包装javascript / jquery代码吗? 我感兴趣的一些主题: jQuery的方法:我对AJAX 使用了很多方法(通常在动态创建的DOM元素上使用)。单击处理程序是否应该 始终 在 内部 ? 性能:将各