Java开发之常用的判空方法
一、JDK8自带的方法
1.运算符判断
1.1 如果判断的是基本类型,判断的是值是否相等。示例: int a=1, double b=1.0
1.2 如果判断的是引用类型,判断的是地址是否相等,即判定是不是同一个对象
// 判断对象为空
Object obj;
if (obj == null) {}
2.Object方法
String s = null;
if (Objects.isNull(s)) {// true
}
if (Objects.nonNull(s)) {// false
}
源码如下:
3.Optional方法
String s = "debug";
if (Optional.ofNullable(s).isPresent()) {// true
}
源码如下:
二、第三方工具包
1.使用 Apache Commons
1.1 StriingUtils
使用
isEmpty()
:- 当你只关心字符串是否为
null
或完全为空(""
),而不在乎它是否包含空格时。 - 例如,你从某个 API 获取一个可能返回
""
的 ID 字段,你想知道它是否有值。
- 当你只关心字符串是否为
使用
isBlank()
:- 当你认为“只有空格的字符串”也等同于“没有输入”或“无效输入”时。
- 这是更常见、更推荐的用法,尤其是在处理用户输入时。用户在文本框中只输入空格,通常意味着他们没有真正输入内容。
- 例如,验证用户名、邮箱、地址等表单字段时,应该使用
isBlank()
来防止用户只输入空格就提交。
import org.apache.commons.lang3.StringUtils;String s = " ";
boolean isEmpty = StringUtils.isEmpty(s); // false, null || length == 0
boolean isBlank = StringUtils.isBlank(s); // true, null || length == 0 || whitespace only
源码如下:
1.2 CollectionUtils
- isEmpty() 这个方法非常实用,因为它可以安全地处理
null
值。 - 如果传入的集合为
null
或者集合本身不为null
但其中没有任何元素(size() == 0
),该方法都会返回true
。 - 这避免了在检查前手动进行
null
判断,使代码更简洁、更安全。
import org.apache.commons.collections.CollectionUtils;List<String> list = new ArrayList();
isEmpty = CollectionUtils.isEmpty(list); // true
源码如下:
1.3 ObjectUtils
- defaultIfNull()方法中,如果传入的对象为
null
,则返回一个指定的默认值;否则返回对象本身 - 为可能为
null
的对象提供一个安全的默认值,避免后续处理中出现空指针异常。
import org.apache.commons.lang3.ObjectUtils;String name = null;
String safeName = ObjectUtils.defaultIfNull(name, "Unknown");
System.out.println(safeName); // 输出: UnknownString anotherName = "不想debug";
String safeAnotherName = ObjectUtils.defaultIfNull(anotherName, "Unknown");
System.out.println(safeAnotherName); // 输出: 不想debug
总结
实际开发中还是需要根据不同数据类型进行判断,推荐使用第三方工具包。