Следующий фрагмент использует простой Java-код.Неизвестный NullPointerException в 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()));
}
}
Приведенный выше код работает нормально, без проблем, и отображает Value = null
на консоли.
В следующем return
заявлении
return demo==null?new Integer(1):demo.getValue();
, так как объект demo
типа Demo
является неnull
, выражение после того, как :
который demo.getValue()
выполняется, который вызывает getValue()
в пределах внутреннего Demo
класса, который возвращает null
и, наконец, он преобразуется в String и отображается на консоли.
Но когда я изменить operations()
метод что-то, как показано ниже,
private Integer operations()
{
Demo demo = new Demo();
return demo==null?1:demo.getValue();
}
он бросает NullPointerException
. Как?
Я имею в виду, когда я использую этот return
заявление
return demo==null?new Integer(1):demo.getValue();
он работает (не бросает NullPointerException
)
и когда я использую следующий нечто подобноеreturn
заявление
return demo==null?1:demo.getValue();
вызывает NullPointerException
. Зачем?
http://stackoverflow.com/questions/7811608/java-npe-in-ternary-operator-with-autoboxing –
Возможный дубликат [странное Java NullPointerException с autoboxing] (http://stackoverflow.com/questions/ 3265948/странно ява-NullPointerException-с-Autoboxing) – Pops