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

Java中的equals()和hashCode()协定

柯唯
2023-03-14
问题内容

Bert Bates和Kathy Sierra的SCJP 6学习指南在第554页中指出(除其他要求外) x.hashCode()!=
y.hashCode()要求x.equals(y)== false

但是Javadoc for Object并未明确提及此类要求。Quote:
如果根据equals(Object)方法,两个对象相等,则在两个对象中的每个对象上调用hashCode方法必须产生相同的整数结果。

我是否应该将Javadoc所说的作为实质含义,例如 eq- > hc?这样,这两个来源之间就不会有冲突。


问题答案:

正如z5h所说,这些语句是等效的。

对于逻辑条件x和y,“ x表示y”与“!y表示!x”相同。

从逻辑上讲,“如果某物是公共汽车,则为红色”在逻辑上等同于“如果某物不是红色,则为非公共汽车”。

这是对立的。

我是否应该将Javadoc所说的作为实质含义,例如eq-> hc。

是的,这正是它的意思:两个相等的对象equals表示其哈希码必须相等。



 类似资料:
  • 问题内容: 鉴于这种: 输出为: 这是为每个对象提供false,但每个String对象的哈希码都相同。为什么会这样呢? 问题答案: 确实比较 对象的 真实相等性(我的意思是-两个引用都指向同一个对象),而不是它们的内容,而比较内容(至少对于String)。 并指向不同的对象。 还要注意,如果对象相等,则它们的哈希必须相同,但是如果哈希码相同,则并不意味着对象相等。

  • 问题内容: 因此,我有一个带有一堆需要实现的方法的接口,这些方法的名称无关紧要。 实现此接口的对象通常放入集合中,并且具有我希望它们使用的特殊toString()格式。 因此,我认为将hashCode(),equals()和toString()放入接口将很方便,以确保我记得重写这些默认方法。但是,当我将这些方法添加到接口中时,即使没有明确实现这三个方法,IDE / Compiler也不会抱怨,即使

  • 本文向大家介绍java集合——Java中的equals和hashCode方法详解,包括了java集合——Java中的equals和hashCode方法详解的使用技巧和注意事项,需要的朋友参考一下 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用。 equals()

  • 问题内容: 我在很多地方读到说 Java中的覆盖方法时,也应该覆盖方法,否则就是“违反合同”。 但是到目前为止,如果我仅覆盖equals方法,而不覆盖hashCode方法,则不会遇到任何问题。 什么合同 为何我在违反合同时没有遇到任何问题?如果没有重写hashCode方法,在哪种情况下会遇到问题? 问题答案: 你将遇到的问题是集合,其中元素的唯一性是根据和计算的,例如。 顾名思义,它依赖于哈希表,

  • 问题内容: 这里已经有一些 关于JPA实体的讨论,以及对于JPA实体类应该使用哪种hashCode()/ equals()实现。它们中的大多数(如果不是全部)都依赖于Hibernate,但是我想中立地讨论它们(通过顺便说一下,我正在使用EclipseLink)。 在以下方面,所有可能的实现都有各自的优点和缺点: hashCode()/equals()合同一致性(不变性)为List/ Set操作 是

  • 问题内容: and方法必须一致,这意味着当两个对象根据方法相等时,它们的方法应返回相同的哈希值。 如果我们不重写hashCode()方法,则Java将返回唯一的哈希码。 为什么取消注释该行会导致编译错误? 如果对象的哈希码不相等,即使默认哈希码有所不同,为什么它们显示为相等? 问题答案: 平等仅由方法equals()确定。并且hashCode()方法可用于其他情况,例如Map或Set。实际调用eq