前言
遇到一个三元表达式问题,抛出空指针异常,原因在于三元表达式拆箱
三元表达式拆箱
问题复现
程序执行到这一步

csharp
devBaseVO.getOnlineStatus() 为null
这个时候,抛了空指针异常 该枚举类为

问题分析
三元表达式遇到前面是基本类型时,会拆箱,如果前面是引用类型,就不会拆箱
问题复现
ini
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);
}
}
输出
原因在于引用类型拆箱了
ini
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);
}
}
输出为
前面是引用类型,就不会拆箱
总结
使用三元表达式引用类型和基本类型注意拆箱问题