Java三元表达式注意

93 阅读1分钟

前言

遇到一个三元表达式问题,抛出空指针异常,原因在于三元表达式拆箱

三元表达式拆箱

问题复现

程序执行到这一步

image.png

devBaseVO.getOnlineStatus() 为null

这个时候,抛了空指针异常 该枚举类为

image.png

问题分析

三元表达式遇到前面是基本类型时,会拆箱,如果前面是引用类型,就不会拆箱

问题复现

import java.util.Objects;

public class HelloDemo {

    static void main() {
        User user = new User();
//        user.setA(null);
        String a = "1";
        int c = 1;
        Integer b = Objects.equals(a, "2") ? c : user.getA();
        System.out.println(b);
    }
}

输出

image.png 原因在于引用类型拆箱了

import java.util.Objects;

public class HelloDemo {

    static void main() {
        User user = new User();
//        user.setA(null);
        String a = "1";
        Integer c = 1;
        Integer b = Objects.equals(a, "2") ? c : user.getA();
        System.out.println(b);
    }
}

输出为

image.png 前面是引用类型,就不会拆箱

总结

使用三元表达式引用类型和基本类型注意拆箱问题