¿Es la desigualdad transitiva en Java?
-
27-10-2019 - |
Pregunta
Si tengo 3 objetos a, b, y C, y quiero comprobar que ninguno de ellos sea igual entre sí, necesito comprobar:
if (!a.equals(b) && !b.equals(c) && !a.equals(c)) { // to simplify, assume non-null
// do something
}
Según los documentos de Java, para un método igual correctamente implementado:
Es transitivo:para cualquier valor de referencia no nulo x, y y z, si x.equals(y) devuelve verdadero y y.equals(z) devuelve verdadero, entonces x.equals(z) debería devolver verdadero.
Esto establece que la igualdad es transitiva, pero ¿qué pasa con la desigualdad??
Solución
dado a = 5; b = 6; c = 5
:
a != b -> verdadero
b != c -> verdadero
a != c -> falso
entonces no, la desigualdad no es transitiva.
Otros consejos
No es transitivo.Considere x=1
, y=2
y z=1
.
La desigualdad nunca es transitiva (si tiene 2 elementos que no son iguales, ayb).Porque entonces tienes! A.equals (b) y, debido a la simetría! B.equals (a), pero debido a la identidad tienes a.equals (a).Por tanto, la desigualdad no puede ser transitiva.
No, por supuesto que no.
2 != 3
3 != 2
pero
2 == 2
Bueno, no.Para la transitividad, necesita la condición verdadera para cualquier x, y, z;pero si elijo z== x, espero que
x != y
y y!= z
NO implica entonces
x != z
¡ya que z es x!