为什么(不是如何)Object必须符合equals()的javadoc?

Dan*_*lan 2 java equals

javadocObject.equals()解释了您需要遵循的规则才能正确覆盖该方法.它说:

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

如果有人问我为什么equals()要遵守这些规则,我能给出的唯一答案就是"因为javadoc这么说".我对此并不满意.我想更深入地了解为什么存在这些规则.有人可以通过这些规则并解释一下,如果违反这些规则会出现什么问题吗?

duf*_*ymo 6

这些是平等如何运作的数学定义.我会将数学称为更深层次的原因.

Collections API的设计者Joshua Bloch在他的"Effective Java"中拼写了这些内容.我建议您阅读该章和所有其他章节.

你可以在这里找到第3章.