vergleichen Langer Wert in Java [duplizieren]

8

Was ist der Unterschied zwischen den folgenden beiden Aussagen?

%Vor%

Beide geben dasselbe Ergebnis "EQUAL". Aber mein Zweifel ist, dass Long Objekt ist. Wie ist es gleich?

    
PSR 01.02.2013, 08:40
quelle

2 Antworten

10

Wie bereits in den Kommentaren erwähnt, wenn Sie

tun %Vor%

Long l1 wird automatisch auf den primitiven Typ long entpackt. Der Vergleich ist also zwischen long und int .

Im zweiten Fall l1.longValue() gibt den long -Wert des vom Objekt Long dargestellten Long als Primitiv zurück, so dass der Vergleich wieder zwischen long und int erfolgt. Beantworten Sie Ihren Kommentar , werfen Sie einen Blick auf Was ist der Hauptunterschied zwischen dem primitiven Typ und der Wrapper-Klasse?

Der Link in den Kommentaren zu Autoboxing deckt dieses Thema sehr gut ab.

    
Xavi López 01.02.2013, 08:48
quelle
-1

Dieses Verhalten wird durch Erweitern und Boxen erklärt.

Im ersten Beispiel

%Vor%

Was passiert, ist wie folgt:

1: Der Compiler merkt, dass Sie einen Wrapper (Long) mit einem primitiven Wert (int) vergleichen, so dass er das Primitiv einbezieht, was zu folgendem Ergebnis führt:

if (l1 == new Integer(2))

da 2 ein int ist (es fehlt das 'L' am Ende).

2: Der Compiler merkt jetzt, dass wir ein Long mit einem Integer vergleichen, so dass es den Integer zu einem Long erweitert, was zu folgendem Ergebnis führt:

if (l1 == new Long(new Integer(2))

3: Jetzt vergleichen wir zwei Longs.

Der andere Fall ist einfacher, hier ist das Ergebnis einfach:

  

if (2L == 2)

vergleicht die primitiven Werte, die erlaubt sind, obwohl sie unterschiedliche Typen sind.

    
Tobb 01.02.2013 09:07
quelle

Tags und Links