的 javadocObject.equals()
解释了正确覆盖该方法所需遵循的规则。它说:
- 它是自反的:对于任何非空引用值 x,x.equals(x) 应该返回 true。
- 它是对称的:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应该返回 true。
- 它是可传递的:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true 并且 y.equals(z) 返回 true,则 x.equals(z) 应该返回 true。
- 它是一致的:对于任何非空引用值 x 和 y,x.equals(y) 的多次调用始终返回 true 或始终返回 false,前提是没有修改对象上 equals 比较中使用的信息。
- 对于任何非空引用值 x,x.equals(null) 应该返回 false。
如果有人问我为什么equals()
要遵循这些规则,我能给出的唯一答案是,“因为 javadoc 是这么说的”。我对此并不满意。我想更深入地了解这些规则存在的原因。有人可以仔细阅读这些规则,并举例说明如果违反这些规则会出现什么问题吗?