在 Java 中,判断一个 String 对象是否为 null 是一个非常基础且重要的操作,直接使用 或 if 条件语句即可完成。

下面我将从基础到进阶,详细解释各种判断方法及其最佳实践。
基础判断:直接使用 if 语句
这是最直接、最常见的方法,当 String 对象为 null 时,在 if 条件中被判断为 false。
String myString = null;
if (myString == null) {
System.out.println("myString 是 null");
} else {
System.out.println("myString 不是 null,其值为: " + myString);
}
// 输出: myString 是 null
为什么这样可行?
在 Java 中,null 是一个字面量,表示一个不引用任何对象的引用,在布尔上下文中(如 if 条件),null 会被自动转换为 false,任何非 null 的对象引用都会被转换为 true。
判断空字符串
除了判断 null,我们还需要判断字符串是否为空,即长度为 0 的字符串 。

使用 String.length()
length() 方法返回字符串中的字符数,空字符串的长度为 0。
String emptyString = "";
if (emptyString.length() == 0) {
System.out.println("emptyString 是空字符串");
}
// 输出: emptyString 是空字符串
使用 String.isEmpty()
isEmpty() 方法是 Java 6 引入的,专门用于判断字符串是否为空,它比 length() == 0 更具可读性,是更推荐的方式。

String emptyString = "";
if (emptyString.isEmpty()) {
System.out.println("emptyString 是空字符串");
}
// 输出: emptyString 是空字符串
判断 null 或空字符串
在实际开发中,我们经常需要同时判断一个字符串是否为 null 或者是否为空字符串,这是最常见的场景。
使用 if 语句(推荐)
这是最清晰、最不容易出错的方式,也是所有 Java 开发者都能看懂的标准写法。
String str = null; // 或者 String str = ""; 或者 String str = "Hello";
if (str == null || str.isEmpty()) {
System.out.println("字符串为 null 或空");
} else {
System.out.println("字符串有内容: " + str);
}
为什么是 (OR) 而不是 && (AND)?
if (str == null || str.isEmpty()):意思是 "str是null或者str是空字符串"。- 短路求值:
str == null的结果是true,Java 就不会去执行后面的str.isEmpty(),从而避免了在str为null时调用方法而导致的NullPointerException,这是这种写法安全的关键。
使用 StringUtils (来自 Apache Commons Lang 或 Spring Framework)
如果你正在使用这些流行的库,可以使用它们提供的工具类,代码会更简洁。
// 需要 Apache Commons Lang 依赖
// import org.apache.commons.lang3.StringUtils;
String str = null;
// isBlank() 不仅判断 null 和 "",还会判断 " " (只有空格的字符串)
if (StringUtils.isBlank(str)) {
System.out.println("字符串为 null、空或仅包含空白字符");
}
// isEmpty() 只判断 null 和 ""
if (StringUtils.isEmpty(str)) {
System.out.println("字符串为 null 或空");
}
使用 Java 8+ 的 Optional (函数式风格)
Optional 是 Java 8 引入的容器类,用于优雅地处理可能为 null 的值,可以避免显式的 null 检查。
import java.util.Optional;
String str = null;
// 使用 Optional.ofNullable() 创建一个 Optional 对象
// str 为 null,则创建一个空的 Optional
// str 不为 null,则创建一个包含 str 的 Optional
boolean isNullOrEmpty = Optional.ofNullable(str).isEmpty();
if (isNullOrEmpty) {
System.out.println("字符串为 null 或空");
}
或者更传统一点的 Optional 用法:
String str = null;
Optional<String> optionalStr = Optional.ofNullable(str);
if (optionalStr.isEmpty()) { // 或者 !optionalStr.isPresent()
System.out.println("字符串为 null 或空");
}
常见错误:NullPointerException
绝对不要这样做:
String str = null;
// 错误写法!这会抛出 NullPointerException
if (str.isEmpty()) {
// ...
}
原因分析:
str的值是null。isEmpty()是一个实例方法,需要通过一个对象来调用。- 尝试在
null引用上调用方法,JVM 无法找到该方法所属的对象,因此会抛出NullPointerException。
判断 null、空字符串 和纯空格字符串
我们需要判断一个字符串是否“没有实际内容”,这包括 null、 和 。
使用 String.trim()
trim() 方法会移除字符串首尾的空白字符(包括空格、制表符、换行符等),如果字符串只包含空白字符,trim() 后会变成空字符串 。
String str = " ";
if (str == null || str.trim().isEmpty()) {
System.out.println("字符串为 null、空或仅包含空白字符");
}
// 输出: 字符串为 null、空或仅包含空白字符
使用 StringUtils.isBlank() (推荐)
如前所述,Apache Commons Lang 的 StringUtils.isBlank() 方法正是为此设计的,它内部也使用了 trim(),但代码更简洁。
// import org.apache.commons.lang3.StringUtils;
String str = " ";
if (StringUtils.isBlank(str)) {
System.out.println("字符串为 null、空或仅包含空白字符");
}
总结与最佳实践
| 场景 | 推荐写法 | 说明 |
|---|---|---|
仅判断 null |
if (str == null) |
基础、直接。 |
| 仅判断空字符串 | if (str.isEmpty()) |
比 str.length() == 0 更可读。 |
判断 null 或 |
if (str == null || str.isEmpty()) |
最常用、最推荐的标准写法,清晰且安全。 |
判断 null、 或 |
if (str == null || str.trim().isEmpty()) |
标准写法。 |
判断 null、 或 |
if (StringUtils.isBlank(str)) |
最佳实践(如果允许引入第三方库),代码更简洁,意图更明确。 |
| 函数式风格 | if (Optional.ofNullable(str).isEmpty()) |
Java 8+ 风格,适合函数式编程,但可读性可能略逊于标准写法。 |
核心要点:
- 永远不要在可能为
null的对象上直接调用方法。 - 总是先检查
null,再检查其内容(如isEmpty())。 str == null || str.isEmpty()是判断字符串是否为空或为null的黄金标准,请牢记。- 如果你的项目允许使用 Apache Commons Lang 或 Spring,
StringUtils.isBlank()是处理这类问题的首选工具。
