以下代码段使用简单的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()));
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码按预期工作,没有问题,并Value = null在控制台上显示.
在以下return声明中,
return demo==null?new Integer(1):demo.getValue();
Run Code Online (Sandbox Code Playgroud)
由于对象demo类型的Demo是不 null,表达后:,其demo.getValue()被执行,调用getValue()所述内内Demo返回类null,最后,它被转换为字符串,并在控制台上显示.
但是当我修改operations()方法时,如下所示,
private Integer operations()
{
Demo demo = new Demo();
return demo==null?1:demo.getValue();
}
Run Code Online (Sandbox Code Playgroud)
它抛出NullPointerException.怎么样?
我的意思是当我使用这个return陈述时
return demo==null?new Integer(1):demo.getValue();
Run Code Online (Sandbox Code Playgroud)
它工作(不扔NullPointerException)
而当我使用以下类似的 return声明
return demo==null?1:demo.getValue();
Run Code Online (Sandbox Code Playgroud)
它导致NullPointerException.为什么?
Jon*_*eet 11
这个说法:
return demo==null?1:demo.getValue();
Run Code Online (Sandbox Code Playgroud)
实际上是转换成这样的东西:
int tmp = demo == null ? 1 : demo.getValue().intValue();
return (Integer) tmp;
Run Code Online (Sandbox Code Playgroud)
根据JLS第15.25节中规定的规则,使用二进制数字提升(5.6.2)确定条件表达式的类型int(不).从空引用转换为然后触发.IntegerintNullPointerException
| 归档时间: |
|
| 查看次数: |
521 次 |
| 最近记录: |