A desigualdade é transitiva em Java?
-
27-10-2019 - |
Pergunta
Se eu tiver 3 objetos a , b e c e quiser verificar se nenhum deles é igual um ao outro, Preciso verificar:
if (!a.equals(b) && !b.equals(c) && !a.equals(c)) { // to simplify, assume non-null
// do something
}
De acordo com os documentos Java, para um método equals implementado corretamente:
É transitivo: para quaisquer valores de referência não nulos x, y e z, se x.equals (y) retornar verdadeiro e y.equals (z) retornar verdadeiro, então x.equals (z)deve retornar verdadeiro.
Isso afirma que a igualdade é transitiva, mas e a desigualdade ?
Solução
dado a = 5; b = 6; c = 5
:
a!= b -> verdadeiro
b!= c -> verdadeiro
a!= c -> falso
então não, a desigualdade não é transitiva.
Outras dicas
Não é transitivo.Considere x=1
, y=2
e z=1
.
A desigualdade nunca é transitiva (se você tiver 2 elementos que não são iguais, a e b).Porque então você tem! A.equals (b) e, por causa da simetria! B.equals (a), mas por causa da identidade você tem a.equals (a).Portanto, a desigualdade não pode ser transitiva.
Não, claro que não.
2 != 3
3 != 2
mas
2 == 2
Bem, não.Para transitividade, você precisa da condição verdadeira para qualquer x, y, z;mas se eu escolher z== x, espero muito que
x != y
e y!= z
então NÃO implica
x != z
já que z é x!