La disuguaglianza è transitiva in Java?
-
27-10-2019 - |
Domanda
Se ho 3 oggetti a , b e c e desidero verificare che nessuno di essi sia uguale tra loro, Devo controllare:
if (!a.equals(b) && !b.equals(c) && !a.equals(c)) { // to simplify, assume non-null
// do something
}
Secondo i documenti Java, per un metodo uguale implementato correttamente:
È transitivo: per qualsiasi valore di riferimento non nullo x, yez, se x.equals (y) restituisce true e y.equals (z) restituisce true, allora x.equals (z)dovrebbe restituire true.
Questo afferma che l'uguaglianza è transitiva, ma per quanto riguarda la disuguaglianza ?
Soluzione
dato a = 5; b = 6; c = 5
:
a!= b -> vero
b!= c -> vero
a!= c -> false
quindi no, la disuguaglianza non è transitiva.
Altri suggerimenti
Non è transitivo.Considera x=1
, y=2
e z=1
.
La disuguaglianza non è mai transitiva (se hai 2 elementi che non sono uguali, aeb).Perché allora hai! A.equals (b) e, a causa della simmetria! B.equals (a), ma a causa dell'identità hai a.equals (a).Quindi la disuguaglianza non può essere transitiva.
No, of course not.
2 != 3
3 != 2
but
2 == 2
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
x != y
and y != z
does NOT then imply
x != z
since z is x!