2015-04-26 11 views
5
public class AutoBoxingAndUnBoxing 
{ 
    public static void main(String[] args) 
    { 
     Integer x = 127; 
     Integer y = 127; 
     System.out.println(x == y);//true 

     Integer a = 128; 
     Integer b = 128; 
     System.out.println(a == b);//false 
     System.out.println(a); // prints 128 
    } 
} 

Wie x==y kommen wahr und a==b ist falsch? Wenn es auf dem Wert (Integer -128 To 127) basiert, dann sollte 'a'-128 richtig drucken?Referenz Vergleich mit == Operator

+2

Der Bereich von 'Integer' ist -2^31 zu 2^31 - 1. Es ist nicht -128 zu 127; das ist der Bereich eines 'Bytes'. –

Antwort

2

Beim Vergleichen von Integer Objekten funktioniert der Operator == möglicherweise nur für Zahlen zwischen [-128,127]. Schauen Sie sich die JLS:

Wenn der Wert p eingerahmt wird, ist wahr, falsch, ein Byte oder ein Zeichen im Bereich \ u0000 bis \ u007f oder ein int oder Kurz Zahl zwischen -128 und 127 (einschließlich), dann seien r1 und r2 die Ergebnisse von zwei Boxing Konversionen von p. Es ist immer der Fall, dass r1 == r2.

Da diese Werte Sie vergleichen in dem genannten Bereich nicht, wird das Ergebnis auf false ausgewertet werden, wenn Sie Integer#equals verwenden.

+0

ok, aber was ist der Wert nach 127, wenn der Bereich zwischen -128 und 127 liegt? – kittu

+0

@kittu was meinst du "der Wert"? Diese Werte werden aufgrund von Leistungsproblemen zwischengespeichert. Werte, die außerhalb dieses Bereichs liegen, sollten mit "equals" verglichen werden. – Maroun

+0

Ich meine, wie 'a == b 'in meinem Fall falsch ist? Was passiert intern, um es falsch zu machen? :/ – kittu

Verwandte Themen