Ist Ungleichheit in Java transitiv?
-
27-10-2019 - |
Frage
Wenn ich 3 Objekte a , b und c habe und überprüfen möchte, ob keines davon gleich istIch muss überprüfen:
if (!a.equals(b) && !b.equals(c) && !a.equals(c)) { // to simplify, assume non-null
// do something
}
Gemäß den Java-Dokumenten gilt für eine korrekt implementierte Gleichheitsmethode:
Es ist transitiv: Wenn für alle Nicht-Null-Referenzwerte x, y und z x.equals (y) true und y.equals (z) true zurückgibt, wird x.equals (z) zurückgegeben.sollte true zurückgeben.
Dies besagt, dass Gleichheit transitiv ist, aber was ist mit Ungleichheit ?
Lösung
gegebener a = 5; b = 6; c = 5
:
a!= b -> true
b!= c -> true
a!= c -> false
Also nein, Ungleichung ist nicht transitiv.
Andere Tipps
Es ist nicht transitiv.Betrachten Sie x=1
, y=2
und z=1
.
Ungleichung ist niemals transitiv (wenn Sie zwei ungleiche Elemente haben, a und b).Denn dann haben Sie! A.Gleiche (b) und wegen der Symmetrie! B.Gleiche (a), aber wegen der Identität haben Sie a.equale (a).Ungleichheit kann also nicht transitiv sein.
Nein, natürlich nicht.
2 != 3
3 != 2
aber
2 == 2
Nun, nein.Für die Transitivität benötigen Sie die Bedingung true für any x, y, z;aber wenn ich z== x wähle, würde ich sehr hoffen, dass
x != y
und y!= z
bedeutet dann NICHT
x != z
da z x ist!