Является ли неравенство транзитивным в 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

так что нет, неравенство не является переходным.

Это не транзитивно. Рассматривать x=1, y=2 а также z=1,

Неравенство никогда не бывает транзитивным (если у вас есть 2 элемента, которые не равны, a и b). Потому что тогда у вас есть! A.equals (b) и из-за симметрии! B.equals(a), но из-за идентификации у вас есть a.equals (a). Так что неравенство не может быть переходным.

Нет, конечно нет.

2 != 3
3 != 2

но

2 == 2

Ну нет. Для транзитивности вам нужно условие true для любых x, y, z; но если я выберу z == x, я бы очень надеялся, что

x != y

и y!= z

НЕ подразумевает

x != z

так как г х!

Другие вопросы по тегам