Poniższy fragment wykorzystuje prosty kod Java.Nieznany wyjątek NullPointerException w Javie
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()));
}
}
Powyższy kod działa zgodnie z oczekiwaniami bez problemu i wyświetla Value = null
na konsoli.
W poniższej return
oświadczeniu
return demo==null?new Integer(1):demo.getValue();
od obiektu demo
typu Demo
jest nienull
wyrażenie po :
który jest demo.getValue()
jest wykonywany który wywołuje getValue()
w wewnętrznym Demo
klasy, która zwraca null
i na koniec jest konwertowany na String i wyświetlany na konsoli.
Ale kiedy modyfikować operations()
metoda coś podobnego do przedstawionego poniżej,
private Integer operations()
{
Demo demo = new Demo();
return demo==null?1:demo.getValue();
}
rzuca NullPointerException
. W jaki sposób?
Znaczy kiedy używam tego return
oświadczenie
return demo==null?new Integer(1):demo.getValue();
to działa (nie rzucać NullPointerException
)
i kiedy użyć następującego coś podobnegoreturn
oświadczenie
return demo==null?1:demo.getValue();
to powoduje NullPointerException
. Czemu?
http://stackoverflow.com/questions/7811608/java-npe-internated-operator-z-autoboxing –
możliwy duplikat [dziwnego Java NullPointerException z autoboxingiem] (http://stackoverflow.com/questions/ 3265948/strange-java-nullpointerexception-with-autoboxing) – Pops