以下代码使用简单的条件运算符。
public class Main
{
public static void main(String[] args)
{
Integer exp1 = true ? null : 5;
Integer exp2 = true ? null : true ? null : 50;
System.out.println("exp1 = " +exp1+" exp2 = "+exp2);
Integer exp3 = false ? 5 : true ? null: 50; //Causes the NullPointerException to be thrown.
System.out.println("exp3 = "+exp3);
}
}
这段代码编译得很好。所有的表达式最终都试图分别分配null
给Integer
类型变量exp1
,exp2
和exp3
。
前两种情况不会引发任何异常并产生exp1 = null exp2 = null
显而易见的结果。
然而,最后一种情况,如果你仔细看,你会看到它也尝试分配null
类型Integer
变量exp3
,看起来与前两种情况类似,但它会导致NulllPointerException
抛出。为什么会这样?
在我发布我的问题之前,我已经提到了这个很好的问题,但在这种情况下,我找不到 JLS 指定的规则适用于此处。