2010-10-20 28 views
7

ich habe einen Code alsCasting boolean in Java Boolean

public class BooleanTest { 
    public BooleanTest() { 
     super(); 
    } 


    public static void main(String args[]){ 
     BooleanTest bt = new BooleanTest(); 
     bt.doProcess(); 

    } 

    private boolean method() { 
     return false; 
    } 

    private void doProcess() { 
     Boolean obj = (Boolean)method(); 
     System.out.println(obj.booleanValue()); 
    } 
} 

die Frage ist, kann System.out.println(obj.booleanValue());NullPointerException throw in jeder Situation die Linie?

+4

Jedes Mal, wenn ich es sehe, frage ich mich, warum Leute keine args-Konstruktoren schreiben und explizit super() aufrufen. – Qwerky

+0

Da jemand einen anderen Konstruktor hinzufügen kann und Sie sicherstellen möchten, dass der Noarags-Konstruktor immer vorhanden ist. Weil es logisch expliziter ist. Obwohl ich in einem illustrativen Codeausschnitt zugeben muss, ist es nicht sehr nützlich. – DJClayworth

+0

Es gibt auch keinen Grund, super() aufzurufen. –

Antwort

11

Nein, wenn Sie einen primitiven Wert in den entsprechenden Wrapper-Typ eingeben, ist das Ergebnis niemals null.

+2

Das liegt daran, dass ein primitiver Typ ** nie ** null sein kann. –

+0

@Die Elite Gentleman Das ist, was ich erwähnte –

+0

@ org.life.java, sorry, lesen Sie nie Ihren Beitrag .... –

7

Kein,

Grund: primitive halten nie null, so sie Wrapper Umwandlung wird nie führen zu NPE,

Und auch keine Notwendigkeit Kaste wird es autobox

+2

Es ist nicht wirklich etwas mit Standardwerten zu tun. Es hat damit zu tun, dass primitive Typen Werttypen sind - der Wert einer 'int'-Variablen ist die ganze Zahl selbst, keine Referenz ... also wie könnte es jemals' null 'sein? –

+0

@Jon, erwähnte ich über den Standardwert, nur um OP zu verstehen, dass in jedem Fall primitive NULL –

+2

leaf.java hält: Für mich verwirrt das Dinge mehr als sie klarer zu machen. Der Unterschied zwischen Werttypen und Referenztypen hat sehr wenig mit Standardwerten zu tun. –

3

Es wird niemals eine NPE werfen und auch wenn Sie Java> = 1.5 verwenden, müssen Sie es nicht umwandeln. Es heißt Autoboxing und wird von JDK 1.5 eingeführt.

2

Um pedantisch zu sein, haben Sie möglicherweise System.out auf null gesetzt, dann generiert diese Zeile eine NPE.

Aber das wäre seltsam.