2012-04-05 6 views
-4

Was wird die Ausgabe dieses Codes sein? Bitte erläutern Sie, wie die Autoboxing- oder Unboxing-ID hier erfolgt.Vergleichen eines booleschen Objekts mit einem booleschen Primitiv

class MyBoolean 
{ 
    Boolean[] bool = new Boolean[5]; 

    public static void main(String[] args) 
    { 
     new MyBoolean().myMethod(); 
    } 

    public void myMethod() 
    { 
     if(bool[1]==true) 
     { 
     System.out.println("It's true"); 
     } 
     else 
     { 
     System.out.println("It's false"); 
     } 
    } 
} 
+4

Warum führen Sie es nicht und finden es heraus? –

+1

Ich muss wissen, was intern in diesem Vergleich passiert: – Vibhor

+1

Ich meine es ernst; Lauf es, und du wirst deine Antwort bekommen. –

Antwort

4

Ausführen schlägt fehl: Bool [1] ist Null und Vergleich werfen NullPointerException.

+1

-1: Der '==' Operator kann die NullPointerException nicht verursachen. –

+1

Aber Java versucht, bool [1] in einen Boolean-Objekt zu eval-Vergleich zu konvertieren. Sie haben eine NullPointerException erhalten. – dash1e

+1

@ dash1e: * "Aber Java versucht, bool [1] in ein boolesches Objekt zu konvertieren" * Nein, die Laufzeit versucht das 'Boolean' in' bool [1] 'in ein' boolesches * * primitives * umzuwandeln (Kleinschreibung)). Es ist * diese * Konvertierung, die die NPE verursacht, weil es in 'bool [1]' überhaupt kein 'Boolean' gibt. –

5

Der Code schlägt mit NullPointerException fehl, da bool[1]null enthält. Gemäß der Java Language Specification, Section 5.1.8 erfolgt das Unboxing eines durch Aufruf booleanValue() unter der Referenz. Da in diesem Fall die Referenz null lautet, erhalten Sie eine NPE.

In einem Kommentar zu einer anderen Antwort, Sie schrieb:

Der Grund, diese Frage zu fragen, ob wir die NPE über AutoUnBoxing oder via Autoboxing bekommen zu verstehen ist. In meinem Verständnis ist es wegen AutoBoxing.

Es ist aufgrund Unboxing (eine primitive von einem Referenztyp zu extrahieren), nicht Boxen (eine primitive in einem Referenztyp Verpackung). Insbesondere aus JLS Section 15.21.2 (Boolesche Operatoren Gleichheit == und !=):

Falls einer der Operanden den Typ Boolean, wird es an unboxing Umwandlung (§5.1.8) unterzogen.

Verwandte Themen