Java 三目表达式报 NullPointerException

1
2
3
> If one of the second and third operands is of primitive type T, and the type of the other is the result of applying boxing conversion (§5.1.7) to T, then the type of the conditional expression is T.
> 如果三目表达式中第二个和第三个操作数中的一个是原始类型 T,另一个操作数的类型是对 T 进行了装箱转换后的类型,那么这个条件表达式的结果类型是 T。
>

参考:Java Ternary ?: operator - Numeric operands conversion rules

示例:

1
2
3
4
boolean b = true;
Integer i = null;
int j = 5;
System.out.println(b ? i : j);

因为 btrue,所以会返回 i,但是根据上面的规则,该三目表达式的结果类型是 int
JVM 要调用 i.intValue() 方法将 Integer 类型转成 int。因为 inull,所以会报 NullPointerException

分享到:
Disqus 加载中...

如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理