2010-10-20 10 views
7

tengo un código comobooleano conversión a Boolean en 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 pregunta se puede alinear System.out.println(obj.booleanValue()); tiro NullPointerException en cualquier situación?

+4

Cada vez que lo veo, me pregunto por qué las personas no escriben args y explícitamente llaman a super(). – Qwerky

+0

Porque alguien podría agregar otro constructor y desea asegurarse de que el constructor noarags esté siempre presente. Porque es lógicamente más explícito. Aunque debo admitir que en un fragmento de código ilustrativo no es muy útil. – DJClayworth

+0

Tampoco es necesario llamar a super(). –

Respuesta

11

No, cuando se inserta un valor primitivo en su tipo de envoltorio equivalente, el resultado nunca es nulo.

+2

Eso es porque un tipo primitivo ** nunca ** puede ser nulo. –

+0

@The Elite Gentleman Eso es lo que mencioné –

+0

@ org.life.java, lo siento, nunca leí tu publicación .... –

7

Sin,

Motivo: primitiva nunca sostenga nula por lo que la conversión a Wrapper Nunca plomo a NPE,

Y también hay necesidad de casta lo hará autobox

+2

No tiene nada que ver con los valores predeterminados. Tiene que ver con el hecho de que los tipos primitivos son tipos de valores; el valor de una variable 'int' es el entero en sí, no una referencia ... entonces, ¿cómo podría ser' nulo'? –

+0

@Jon, mencioné sobre el valor predeterminado solo para hacer que OP entienda que en cualquier caso la primitiva no contendrá NULL –

+2

life.java: Para mí, eso confunde las cosas más que hacerlas más claras. La diferencia entre los tipos de valores y los tipos de referencia tiene muy poco que ver con los valores predeterminados. –

3

Nunca lanzará un NPE y también si está usando java> = 1.5, no necesita lanzarlo. Se llama autoboxing, que se introduce desde JDK 1.5.

2

Para ser pedante, puede haber configurado System.out para ser nulo, entonces esa línea generará un NPE.

Pero eso sería extraño.

Cuestiones relacionadas