三目(元)运算符中NullPointerException分析

当运行下面表达式时,会产生NullPointerException异常:

public static void main(String[] args) {
        
        Integer dsa = null;
        System.out.println(Objects.nonNull(dsa)&& dsa == 1 ? 4 : dsa);


    }

而在运行这个表达式时就正常:

public static void main(String[] args) {
       
        System.out.println(Objects.nonNull(dsa)&& dsa == 1 ? new Integer(4) : dsa);
 }

eexception:

详细分析:

第一步:找到该main方法的class文件

三目(元)运算符中NullPointerException分析_第1张图片

第二步:点击文件目录,在文件目录中输入cmd,点击回车键

三目(元)运算符中NullPointerException分析_第2张图片

第三步:使用javap  类名.class  

三目(元)运算符中NullPointerException分析_第3张图片

第四步:使用javap -c 类名.class ,获取执行详情

 

三目(元)运算符中NullPointerException分析_第4张图片

这样就可以找到问题所在。

 

具体分析:三目运算中若后面两个元素是不同的类型,就会涉及到类型转换,自动拆箱后再进行运算。 就是说,如果运算中有int和Integer,Integer会先转成int再计算,在拆箱的过程中a=null转换成int,导致了NullPointerException。因此在使用三元表达式时,返回内容最好是同一种类型,避免异常。 

你可能感兴趣的:(三目(元)运算符中NullPointerException分析)