以下片段使用简单的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