gpt4 book ai didi

java - 为什么(而不是如何)对象必须符合 equals() 的 javadoc?

转载 作者:行者123 更新时间:2023-12-02 06:03:23 25 4
gpt4 key购买 nike

The javadoc of Object.equals()解释了正确覆盖该方法所需遵循的规则。它说:

  1. 它是自反的:对于任何非空引用值 x,x.equals(x) 应该返回 true。
  2. 它是对称的:对于任何非空引用值 x 和 y,x.equals(y) 应该返回 true 当且仅当 y.equals(x) 返回 true。
  3. 它是传递性的:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true 并且 y.equals(z) 返回 true,则 x.equals(z) 应该返回 true .
  4. 它是一致的:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是在对象的相等比较中使用的信息没有被修改。<
  5. 对于任何非空引用值 x,x.equals(null) 应该返回 false。

如果有人问我为什么 equals() 应该遵循这些规则,我唯一能给出的答案是,“因为 javadoc 是这么说的”。我对此并不满意。我想更深入地了解这些规则的原因。是否有人可以仔细阅读这些规则中的每一条,并举例说明如果违反这些规则会出现什么问题?

最佳答案

这些是平等运作方式的数学定义。我会提到数学作为更深层次的原因。

集合 API 的设计者 Joshua Bloch 在他的“Effective Java”中阐明了这些。我建议您阅读该章和所有其他章节。

您可以找到第 3 章 here .

关于java - 为什么(而不是如何)对象必须符合 equals() 的 javadoc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16363594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com