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