代码上的问题

先看下面的代码

public static void main(String[] args){
Integer x = null;
Boolean flag = false;
System.out.println(flag ? 0 : x);
}

理论上应该输出的是 null,但是运行的时候会会得到一个空指针异常。

Idea 已经给出了提示

x 变量的自动拆箱可能会导致空指针异常

因为 0 是 int 类型,如有返回的是 x,x 这个 包装类型 Integer 会被自动拆箱为 int 类型。
底层就是调用 .intValue() 这个方法,因为 x 是 null 这里就会出现一个空指针异常。
像这样的还可能在下面的操作中发生



NUMBER 是 int 基本类型 age 是 Integer 类型,会进行自动拆箱。而 agenull 就会出现空指针异常。

调用接口、方法时

有些人喜欢在调用接口、方法,查不到数据的时候直接 return null;
这里很可能会因为没有做判空导致空指针异常。这里建议直接抛出一个数据不存在的异常。
Optional 是一个比较好的处理空指针的类

String str = null;
Optional<String> optional = Optional.ofNullable(str);
if(optional.isPresent()){
...
}