Является ли неравенство транзитивным в 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.
Это говорит о том, что равенство является переходным, но как насчет неравенства?
5 ответов
Дано a = 5; b = 6; c = 5
:
a! = b -> правда
b!= c -> правда
a!= c -> false
так что нет, неравенство не является переходным.
Неравенство никогда не бывает транзитивным (если у вас есть 2 элемента, которые не равны, a и b). Потому что тогда у вас есть! A.equals (b) и из-за симметрии! B.equals(a), но из-за идентификации у вас есть a.equals (a). Так что неравенство не может быть переходным.
Ну нет. Для транзитивности вам нужно условие true для любых x, y, z; но если я выберу z == x, я бы очень надеялся, что
x != y
и y!= z
НЕ подразумевает
x != z
так как г х!