次のスニペットは、単純なJavaコードを使用しています。Javaで不明なNullPointerException
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()
ある:
後に発現がnull
を返す内部Demo
クラス内getValue()
を起動している実行されます最後に、Stringに変換されてコンソールに表示されます。
しかし、私は以下のようなoperations()
方法何か、
private Integer operations()
{
Demo demo = new Demo();
return demo==null?1:demo.getValue();
}
を変更すると、それはNullPointerException
をスローします。どうやって?
私は
(NullPointerException
をスローしません)私はこのreturn
声明
return demo==null?new Integer(1):demo.getValue();
を使用するときにそれが動作を意味し、私は次のよう似たようなreturn
声明
return demo==null?1:demo.getValue();
の場合はNullPointerException
となります。どうして?
http://stackoverflow.com/questions/7811608/java-npe-in-ternary-operator-with-autoboxing –
[奇妙なJava NullPointerExceptionとオートボックスの可能な複製](http://stackoverflow.com/questions/) 3265948/strange-java-nullpointexception-with-autoboxing) – Pops