以下片段使用簡單的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()
被執行,調用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
。爲什麼?
http://stackoverflow.com/questions/7811608/java-npe-in-ternary-operator-with-autoboxing – 2012-04-17 06:34:50
可能重複[奇怪的Java NullPointerException與自動裝箱](http://stackoverflow.com/questions/ 3265948 /奇怪-Java的NullPointerException異常與 - 自動裝箱) – Pops 2012-04-30 17:25:11