Ich habe ein sehr merkwürdiges Problem, wenn ich versuche, 2 lange Variablen zu vergleichen, sie zeigen immer falsch und ich kann sicher sein, dass sie den gleichen Zahlenwert haben, indem sie in Eclipse debuggen:
%Vor%Beide obigen 2 Rückgabewerte sind Objekttyp Long, was mich verwirrte. Und um zu überprüfen, dass ich eine Hauptmethode wie folgt geschrieben habe:
%Vor%Es wird True ausgegeben.
Kann mir also jemand Ideen geben? Ich arbeite seit 3 Jahren in Java Development, kann diesen Fall aber nicht erklären.
== vergleicht Referenzen, equals vergleicht den Wert. Diese beiden Long sind Object, also vergleichen sie Referenzen.
BUT Long id1 = 123L;
wird automatisch zu einem Long-Objekt mit Long.valueOf(String)
intern autoboxiert, der Prozess verwendet einen LongCache,
und 123 liegt zwischen dem LongCache [-128,127], also sind sie eigentlich das gleiche Objekt.
weil ==
den Referenzwert vergleicht und kleiner lange Werte werden zwischengespeichert
so funktioniert es für kleinere lange Werte
Siehe auch
Bei einem Problem für 4 Stunden wegen der Verwendung von ==
fest ... Der Vergleich war ok auf Long < 128
, aber ko auf größere Werte.
Im Allgemeinen ist es keine gute Idee, ==
zu verwenden, um Objects
zu vergleichen, .equals()
so viel wie möglich zu verwenden! Behalte ==, >, <, <= etc.
für Primitive.
Tags und Links java equals long-integer