【发布时间】:2013-04-28 03:12:17
【问题描述】:
The javadoc of Object.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 是这么说的”。我对此并不满意。我想更深入地了解为什么这些规则存在。有人可以仔细阅读这些规则并举例说明如果违反这些规则会出现什么问题吗?
【问题讨论】:
-
这是一个奇怪的问题。这样当你在一个对象上调用
.equals()时,你总是知道你得到了什么。如果没有一套规则,您将不会真正知道.equals()给了您什么。但这似乎相当明显,所以我不太确定您在寻找什么。