次のスニペットでは、単純な 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型のオブジェクトがDemois ではない nullため、式:が実行され、それが返される内部クラス内demo.getValue()で呼び出され、最後に String に変換されてコンソールに表示されます。getValue()Demonull
しかし、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ます。なんで?