Il seguente snippet utilizza un semplice codice Java.Unknown NullPointerException in 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()));
}
}
Il codice precedente funziona come previsto senza alcun problema e visualizza Value = null
sulla console.
Nella return
dichiarazione seguente,
return demo==null?new Integer(1):demo.getValue();
poiché l'oggetto demo
di tipo Demo
è nonnull
, l'espressione dopo :
che è demo.getValue()
viene eseguito che invoca getValue()
all'interno della interiore Demo
classe che restituisce null
e infine, viene convertito in String e visualizzato sulla console.
Ma quando modifico il operations()
metodo di qualcosa di simile a quello mostrato qui sotto,
private Integer operations()
{
Demo demo = new Demo();
return demo==null?1:demo.getValue();
}
getta NullPointerException
. Come?
intendo quando uso questo return
dichiarazione
return demo==null?new Integer(1):demo.getValue();
funziona (non gettare NullPointerException
)
e quando uso il seguente qualcosa di similereturn
dichiarazione
return demo==null?1:demo.getValue();
causa NullPointerException
. Perché?
http://stackoverflow.com/questions/7811608/java-npe-in-ternary-operator-with-autoboxing –
possibile duplicato di [strana NullPointerException Java con autoboxing] (http://stackoverflow.com/questions/ 3265948/strange-java-NullPointerException-con-autoboxing) – Pops