三元运算符中隐藏的NullPointerException - 高飞网
181 人阅读

三元运算符中隐藏的NullPointerException

2017-07-28 02:09:46

    在编码过程中,我一向注意,在使用对象中的属性前,进行空判断,以防止空指针异常,而今天遇到的空指针异常,却显得有些诡异。

下面是我的代码:

monitorLog.log("currentUser[" + currentUserId + "] user check :" + userDto == null ? null: userDto.getAge());

    很明显,这是一行日志输出,输出当前用户id,和获取当前用户的年龄,如果年龄为空,直接打印null,否则打印出具体的年龄值,看似没有什么问题,但还是出现了空指针。

    把.class文件反编译出来看:

this.monitorLog.log(("currentUser[" + currentUserId + "] user check :" + userDto == null) ? null : userDto.getAge());

    怪不得呢,编译器把三元运算给拆散了,显示括号中的字符串永远不会为空(即"currentUser[" + currentUserId + "] user check :" + userDto不会为空),因此总会执行三元运算的第二个表达式,即:user.getAge(),当user为空时,就报空指针异常了。

    所以之与程序还是要小心啊,不确定的运算优先级,要加上括号。

还没有评论!
54.81.157.56