Was sind nicht 2 Long-Variablen gleich mit == Operator in Java zu vergleichen?

8

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.

    
Brady Zhu 21.10.2013, 03:27
quelle

3 Antworten

17

== 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.

    
BlackJoker 21.10.2013, 03:32
quelle
6

weil == den Referenzwert vergleicht und kleiner lange Werte werden zwischengespeichert

%Vor%

so funktioniert es für kleinere lange Werte

Siehe auch

Jigar Joshi 21.10.2013 03:28
quelle
0

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.

    
Thibault 22.09.2017 10:19
quelle

Tags und Links