0%

三元运算符导致的空指针异常

文章字数:156,阅读全文大约需要1分钟

今天看《阿里巴巴java开发手册》时看到了一个有意思的空指针异常

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

在三元运算符中 条件 ? 表达式1 : 表达式2
如果表达式1和表达式2存在类型对齐,那么可能因此造成空指针异常。
如上面的代码,表达式1的结果是int类型,然后表达式2的结果也对齐拆箱成int,然而变量c的值是空,于是抛出NPE