代码上的问题
先看下面的代码
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 类型,会进行自动拆箱。而 age
是 null
就会出现空指针异常。
调用接口、方法时
有些人喜欢在调用接口、方法,查不到数据的时候直接 return null;
这里很可能会因为没有做判空导致空指针异常。这里建议直接抛出一个数据不存在的异常。Optional
是一个比较好的处理空指针的类
String str = null;
Optional<String> optional = Optional.ofNullable(str);
if(optional.isPresent()){
...
}