Java 中的不等式具有传递性吗?
如果我有 3 个对象 a、b 和 c,并且我想检查它们是否彼此相等,我需要检查:
if (!a.equals(b) && !b.equals(c) && !a.equals(c)) { // to simplify, assume non-null
// do something
}
根据 Java 文档,对于正确实现的 equals 方法:
它是传递性的:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true 并且 y.equals(z) 返回 true,则 x.equals(z)应该返回 true。
这表明平等是可传递的,但是不平等又如何呢?
If I have 3 objects a, b, and c, and I want to check that none of them are equal to each other, I need to check:
if (!a.equals(b) && !b.equals(c) && !a.equals(c)) { // to simplify, assume non-null
// do something
}
According to the Java docs, for a correctly implemented equals method:
It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
This states that equality is transitive, but what about inequality?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
它不是传递性的。考虑
x=1
、y=2
和z=1
。It's not transitive. Consider
x=1
,y=2
andz=1
.给定 a = 5; b = 6; c = 5:
a != b ->真
b != c ->真
a != c ->错误
,所以不,不平等不具有传递性。
given
a = 5; b = 6; c = 5
:a != b -> true
b != c -> true
a != c -> false
so no, inequality is not transitive.
不等式永远不会传递(如果有两个不相等的元素,a 和 b)。因为这样你就得到了 !a.equals(b),并且由于对称性而得到了 !b.equals(a),但是由于同一性你得到了 a.equals(a)。所以不平等不能是传递性的。
Inequality is never transitive (if you have 2 elements that are not equal, a and b). Because then you have !a.equals(b) and, because of symmetry !b.equals(a), but because of identitiy you have a.equals(a). So unequality cannot be transitive.
不,当然不是。
但
No, of course not.
but
嗯,不。对于传递性,您需要满足任何 x、y、z 的条件;但如果我选择 z == x,我非常希望
并且
y != z
并不表示,
因为 z 是 x!
Well, no. For transitivity you need the condition true for any x, y, z; but if I pick z == x, I would very much hope that
and
y != z
does NOT then imply
since z is x!