在 Java 中判断字符串是否为 null 是一个非常基础且重要的操作,下面我将从最简单的方法到更严谨、更全面的判断方法,为你详细解释。

最直接的方法:使用 比较
这是最基本、最直接的方法,专门用来检查引用是否指向 null。
String str = null;
if (str == null) {
System.out.println("字符串 str 是 null");
} else {
System.out.println("字符串 str 不是 null");
}
关键点:
- 比较的是两个引用变量是否指向内存中的同一个对象。
null在 Java 中是一个特殊的字面量,表示“没有对象引用”。- 是判断
null的唯一正确方式。 千万不要用equals()方法来判断null,否则会抛出NullPointerException(空指针异常)。
更全面的判断:同时检查 null 和空字符串
在实际开发中,我们通常不仅关心字符串是否为 null,还关心它是否是一个空字符串(长度为 0),一个方法同时处理这两种情况会更健壮。
使用 if 语句
这是最清晰、最推荐的方式,易于阅读和维护。

String str = null; // 或者 String str = "";
if (str == null || str.isEmpty()) {
System.out.println("字符串 str 是 null 或空字符串");
} else {
System.out.println("字符串 str 不是 null 也不是空字符串");
}
解释:
str == null:首先检查引用是否为null,如果为true,整个if条件成立,后面的str.isEmpty()不会被执行(短路效应),避免了NullPointerException。str.isEmpty():str不是null,再调用isEmpty()方法检查其内容是否为空。isEmpty()是String类的一个方法,当字符串长度为 0 时返回true。
使用 Objects 工具类 (Java 7+)
Java 7 引入了 java.util.Objects 工具类,它提供了一个静态方法 isNull(),可以使代码更简洁。
import java.util.Objects;
String str = null;
if (Objects.isNull(str) || str.isEmpty()) {
System.out.println("字符串 str 是 null 或空字符串");
}
Objects.isNull(str) 和 str == null 的功能是完全一样的,只是前者在风格上更函数式一些。
严格判断:检查 null、空字符串 和仅包含空白字符的字符串
一个字符串看起来像是有内容,但实际上只包含空格、制表符或换行符,我们也应该认为它是“无效”的,这时可以使用 String.trim() 方法。

trim() 方法会去掉字符串首尾的空白字符。
String str1 = null;
String str2 = "";
String str3 = " ";
String str4 = " hello ";
// 使用 if 语句
if (str1 == null || str1.trim().isEmpty()) {
System.out.println("str1 是 null、空或全空白"); // 输出
}
if (str2 == null || str2.trim().isEmpty()) {
System.out.println("str2 是 null、空或全空白"); // 输出
}
if (str3 == null || str3.trim().isEmpty()) {
System.out.println("str3 是 null、空或全空白"); // 输出
}
if (str4 == null || str4.trim().isEmpty()) {
System.out.println("str4 是 null、空或全空白"); // 不会输出
} else {
System.out.println("str4 不是 null、空或全空白"); // 输出
}
注意: 这种写法有一个小陷阱。str 本身就是 null,str.trim() 会抛出 NullPointerException,所以必须把 null 检查放在前面,利用短路效应来避免错误。
更优雅的封装
为了避免重复写 str == null || str.trim().isEmpty(),你可以将其封装成一个工具方法。
public class StringUtils {
/**
* 检查字符串是否为 null、空字符串或仅包含空白字符。
* @param str 要检查的字符串
* @return 如果字符串为 null、空或全空白,则返回 true;否则返回 false。
*/
public static boolean isBlank(String str) {
return str == null || str.trim().isEmpty();
}
public static void main(String[] args) {
String test1 = null;
String test2 = "";
String test3 = " ";
String test4 = "Hello";
System.out.println("isBlank(null): " + isBlank(test1)); // true
System.out.println("isBlank(\"\"): " + isBlank(test2)); // true
System.out.println("isBlank(\" \"): " + isBlank(test3)); // true
System.out.println("isBlank(\"Hello\"): " + isBlank(test4)); // false
}
}
像 Apache Commons Lang 和 Guava 这样的流行库都提供了类似的 isBlank() 或 Strings.isNullOrEmpty() 方法,强烈推荐在项目中使用它们。
总结与最佳实践
| 判断场景 | 推荐代码 | 说明 |
|---|---|---|
仅判断 null |
if (str == null) |
最基础、最直接。 |
判断 null 或空 |
if (str == null || str.isEmpty()) |
最常用、最健壮的通用写法。 |
判断 null、空 或空白 |
if (str == null || str.trim().isEmpty()) |
用于处理用户输入等场景,过滤掉无意义的空白。 |
| 工具类方法 | StringUtils.isBlank(str) 或 StringUtils.isNotBlank(str) |
最佳实践,将逻辑封装,代码更简洁、可复用,避免重复。 |
核心要点:
- 永远用 判断
null。 - 判断
null和空时,先用 ,再用isEmpty(),利用短路效应防止异常。 - 对于需要处理空白字符的场景,使用
trim().isEmpty()。 - 强烈建议将常用的字符串判断逻辑封装成工具类方法,或者直接使用成熟的第三方库(如 Apache Commons Lang)。
