El siguiente fragmento utiliza un código Java simple.Desconocido NullPointerException en Java
package pkg;
final public class Main
{
final private class Demo
{
private Integer value = null;
public Integer getValue()
{
return value;
}
}
private Integer operations()
{
Demo demo = new Demo();
return demo==null?new Integer(1):demo.getValue();
}
public static void main(String[] args)
{
Main main=new Main();
System.out.println("Value = " + String.valueOf(main.operations()));
}
}
El código anterior funciona como se esperaba sin problemas y muestra Value = null
en la consola.
En el return
declaración siguiente,
return demo==null?new Integer(1):demo.getValue();
ya que el objeto demo
de tipo Demo
es nonull
, la expresión después de :
que es demo.getValue()
se ejecuta que invoca getValue()
dentro de la clase interna Demo
que devuelve null
y finalmente, se convierte a String y se muestra en la consola.
Pero cuando modifico el método operations()
algo así como el que se muestra a continuación,
private Integer operations()
{
Demo demo = new Demo();
return demo==null?1:demo.getValue();
}
arroja NullPointerException
. ¿Cómo?
me refiero cuando uso esta declaración return
return demo==null?new Integer(1):demo.getValue();
funciona (no tira NullPointerException
)
y cuando utilizo el siguiente algo similarreturn
comunicado
return demo==null?1:demo.getValue();
causa NullPointerException
. ¿Por qué?
http://stackoverflow.com/questions/7811608/java-npe-in-ternary-operator-with-autoboxing –
posible duplicado de [extraño NullPoolException con autoboxing] (http://stackoverflow.com/questions/ 3265948/strange-java-nullpointerexception-con-autoboxing) – Pops