0
点赞
收藏
分享

微信扫一扫

Java - 三目运算符对齐类型拆箱爬坑


【强制】三目运算符 condition? 表达式 1 : 表达式 2 中,高度注意表达式 1 和 2 在类型对齐时,可能抛出因自动拆箱导致的 NPE 异常。

说明:以下两种场景会触发类型对齐的拆箱操作:

1)表达式 1 或表达式 2 的值只要有一个是原始类型。

2)表达式 1 或表达式 2 的值的类型不一致,会强制拆箱升级成表示范围更大的那个类型。


反例

Integer a = 1; 
Integer b = 2;
Integer c = null;
Boolean flag = false;
// a*b 的结果是 int 类型,那么 c 会强制拆箱成 int 类型,抛出 NPE 异常
Integer result=(flag ? a*b : c);


案例

public static void main(String[] args) {
Integer a = 1, b = 2, c = null;
System.out.println(true ? a*b : c); // 2
System.out.println(false ? a*b : c); // NPE
}

Ps:编译通过,运行时出问题噢~ 


举报

相关推荐

0 条评论