常见的非空判断方法

为避免空指针异常我们需要进行必要的非空判断

判空情况

数组判空和对象判空如何进行,开发的时候,数据会很乱,进行必要的判空操作很必要,这样前端出问题能快速的知道是数据库的数据混乱。另外对前端传来的数据也应该保持怀疑,对换来的信息进行判空操作(一些修改的不需要,自己慢慢感受)。

  • 对前端传来的字段判空
  • 对mp查到的对象判空
  • 对使用到的mp对象中的字段判空

字符串String判空

  1. 如果字符串不为null且不为空(认为空格是字符)
1
2
3
4
5
6
if (str != null && !str.isEmpty()) {
// 字符串不为空
} else {
// 字符串为空
}

  1. 如果字符串为null或者字符串为空(认为空格是字符)
1
2
3
4
5
if (str == null || str.isEmpty()) {
// 字符串为空
} else {
// 字符串不为空
}
  1. 使用字符串工具类:如果字符串不为空(认为空格是字符)
1
2
3
4
5
6
7
8
import org.apache.commons.lang3.StringUtils;

if (StringUtils.isNotEmpty(str)) {
// 字符串不为空
} else {
// 字符串为空
}

  1. 使用 isBlank() 方法判断(Java 11+)(认为空格不是字符)
1
2
3
4
String str = "   ";
if (str.isBlank()) {
// 字符串为空
}
  1. 使用 equals() 方法判断是否为 null 或空
1
2
3
4
String str = "";
if (str == null || str.equals("")) {
// 字符串为空
}

对象判空

1
2
3
4
5
6
if (str == null) {
//对象为空
} else {
//对象不为空
}

List判空

1
2
3
4
5
if (list != null && list.size() > 0) {
System.out.println("List为空");
} else {
System.out.println("List不为空");
}

集合对象的 isEmpty() 方法不可以用于同时判断集合对象是否为 null 和是否为空列表。如果你尝试在 null 对象上调用 isEmpty() 方法,将会抛出 NullPointerException 异常。

正确的判断方法如下:

1
2
3
if (pwrSystemList == null || pwrSystemList.isEmpty()) {
throw new CustomException("");
}

对象的属性避免空指针

当我们从一个对象中取一个值,设置到另一个对象中,如果取到的为空,则会报空指针异常。有没有一种简便的方法能一口气进行操作?

方法1:

1
if (student.getName()) studentVo.set(student.getName());

方法2:

当我们想使用问号+冒号进行操作的时候,GPT的回答是不行,因为冒号的左右两侧必须是值,而不是一个方法调用。

1
~~student.getName() ? studentVo.set(student.getName()) : studentVo.set("未获取到学生名")~~

GPT给出了一个更好的办法:

1
2
3
Optional.ofNullable(student.getName()).ifPresent(name -> studentVo.setName(name));
Optional.ofNullable(student.getName()).ifPresent(studentVo::setName);

如果是直接赋值的话可以设置字段名:

1
String name = Optional.ofNullable(student.getName()).orElse("未获取到学生名");

或者是如果还想赋值设置默认值:

1
2
Optional.ofNullable(student.getName())
.ifPresentOrElse(name -> studentVo.setName(name),() -> studentVo.setName("未获取到学生名"));

上述代码使用 Optional.ofNullable() 方法将 student.getName() 的返回值转换为 Optional 对象,并使用 ifPresent() 方法对 Optional 对象进行判空。如果值不为空,则执行 Lambda 表达式 name -> studentVo.set(name),将属性值赋给 studentVo


常见的非空判断方法
http://wahoyu.xyz/2023/10/10/NullPointerException/
作者
Wahoyu
发布于
2023年10月10日
许可协议