2010-10-20 29 views
7

ho un codice comeCasting booleano a Boolean in java

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()); 
    } 
} 

La domanda è: può allineare System.out.println(obj.booleanValue()); tiro NullPointerException in ogni situazione?

+4

Ogni volta che lo vedo mi chiedo perché la gente non scrive costruttori di argomenti e chiama esplicitamente super(). – Qwerky

+0

Perché qualcuno potrebbe aggiungere un altro costruttore e si vuole assicurarsi che il costruttore di noarags sia sempre presente. Perché è logicamente più esplicito. Anche se devo ammettere che in un frammento di codice illustrativo non è molto utile. – DJClayworth

+0

Non è inoltre necessario chiamare super(). –

risposta

11

No, quando si casella un valore primitivo nel suo tipo di wrapper equivalente, il risultato non è mai nullo.

+2

Questo perché un tipo primitivo può ** mai ** essere nullo. –

+0

@The Elite Gentleman Questo è quello che ho menzionato –

+0

@ org.life.java, mi dispiace, non ho mai letto il tuo post .... –

7

No,

Motivo: primitiva mai tenere nulla in modo da convertirli in Wrapper sarà mai portare a NPE,

E anche senza bisogno di casta lo farà autobox

+2

Non ha nulla a che fare con i valori predefiniti. Ha a che fare con il fatto che i tipi primitivi sono tipi di valore - il valore di una variabile 'int' è l'intero stesso, non un riferimento ... quindi come potrebbe mai essere" null "? –

+0

@Jon, ho menzionato il valore di default solo per far capire a OP che in ogni caso la primitiva non contiene NULL –

+2

life.java: A me, questo confonde le cose più che renderle più chiare. La differenza tra tipi di valore e tipi di riferimento ha molto poco a che fare con i valori predefiniti. –

3

Non getterà mai un NPE e anche se si utilizza java> = 1.5, non è necessario lanciarlo. Si chiama autoboxing che viene introdotto da JDK 1.5.

2

Giusto per essere pedante, è possibile che System.out sia impostato su null, quindi tale linea genererà un NPE.

Ma sarebbe strano.