- 空字符串:字符串长度为 0,。
- null:字符串对象没有被实例化,指向空。
一个健壮的判断需要同时处理这两种情况,下面我将从最推荐的方法到一些特殊情况,为你详细解析。

最推荐的方法:java.util.Objects (Java 7+)
这是现代 Java(7 及以上版本)中最推荐、最简洁、最安全的方法。
Objects.equals()
这个方法可以完美地处理 null 和空字符串的情况,它会先检查两个对象是否为 null,避免 NullPointerException。
import java.util.Objects;
public class StringCheck {
public static void main(String[] args) {
String str1 = null;
String str2 = "";
String str3 = " ";
String str4 = "Hello";
// 判断是否为 null 或 ""
boolean isBlank1 = Objects.equals(str1, ""); // true
boolean isBlank2 = Objects.equals(str2, ""); // true
boolean isBlank3 = Objects.equals(str3, ""); // false (因为 str3 是 " ")
boolean isBlank4 = Objects.equals(str4, ""); // false
System.out.println("str1 is null or empty: " + isBlank1);
System.out.println("str2 is null or empty: " + isBlank2);
System.out.println("str3 is null or empty: " + isBlank3);
System.out.println("str4 is null or empty: " + isBlank4);
}
}
优点:
- 简洁:一行代码搞定。
- 安全:内置了
null检查,不会抛出NullPointerException。 - 明确:代码意图清晰,直接表达“判断是否等于空字符串”。
经典方法:StringUtils (Apache Commons Lang / Spring)
如果你已经在使用 Apache Commons Lang 或 Spring 框架,StringUtils 是一个非常方便和强大的工具类。

StringUtils.isEmpty() 和 StringUtils.isBlank()
这两个方法在 org.apache.commons.lang3.StringUtils 中定义。
StringUtils.isEmpty(CharSequence cs): 判断字符串是否为null或长度为 0 ()。StringUtils.isBlank(CharSequence cs): 判断字符串是否为null、空字符串 (),或者只包含空白字符(如空格\s, 制表符\t, 换行符\n等)。
示例:
import org.apache.commons.lang3.StringUtils;
public class StringCheck {
public static void main(String[] args) {
String str1 = null;
String str2 = "";
String str3 = " ";
String str4 = "Hello";
// 判断是否为 null 或 ""
boolean isEmpty1 = StringUtils.isEmpty(str1); // true
boolean isEmpty2 = StringUtils.isEmpty(str2); // true
boolean isEmpty3 = StringUtils.isEmpty(str3); // false (因为 str3 包含空格)
boolean isEmpty4 = StringUtils.isEmpty(str4); // false
System.out.println("str1 isEmpty: " + isEmpty1);
System.out.println("str2 isEmpty: " + isEmpty2);
System.out.println("str3 isEmpty: " + isEmpty3);
System.out.println("str4 isEmpty: " + isEmpty4);
System.out.println("--------------------");
// 判断是否为 null, "" 或只含空白字符
boolean isBlank1 = StringUtils.isBlank(str1); // true
boolean isBlank2 = StringUtils.isBlank(str2); // true
boolean isBlank3 = StringUtils.isBlank(str3); // true
boolean isBlank4 = StringUtils.isBlank(str4); // false
System.out.println("str1 isBlank: " + isBlank1);
System.out.println("str2 isBlank: " + isBlank2);
System.out.println("str3 isBlank: " + isBlank3);
System.out.println("str4 isBlank: " + isBlank4);
}
}
优点:
- 功能强大:
isBlank()方法在处理用户输入时非常有用,可以轻松过滤掉纯空格的字符串。 - 代码可读性高:方法名非常直观。
- 行业标准:在许多项目中是标准做法。
缺点:

- 需要引入依赖:如果你没有使用相关框架,需要额外添加
commons-lang3的 Maven/Gradle 依赖。
原生 Java 方法(不推荐,但需了解)
在 Java 7 之前,或者在没有引入第三方库的情况下,开发者通常使用原生方法,这些方法容易出错,不推荐在新代码中使用。
错误的写法(会抛出 NullPointerException)
String str = null;
// if (str.equals("")) { // 这行代码会抛出 NullPointerException!
// System.out.println("String is empty");
// }
原生 Java 的正确写法
为了安全,必须先检查 null。
String str = null;
// 方法1:使用 if 条件
if (str == null || str.equals("")) {
System.out.println("String is null or empty"); // true
}
// 方法2:使用 String.length()
if (str == null || str.length() == 0) {
System.out.println("String is null or empty"); // true
}
为什么不推荐?
- 冗长:需要多写几行代码。
- 容易忘记:开发者很容易忘记
null检查,导致程序崩溃。 - 不够优雅:相比
Objects.equals()或StringUtils.isEmpty(),代码显得笨拙。
特殊情况:判断是否为“空白字符串”
很多时候,我们不仅想判断 null 和 ,还想判断 这样的字符串,这在处理用户输入(如表单)时非常常见。
使用 String.trim()
String.trim() 方法会移除字符串首尾的空白字符(空格、制表符、换行等),我们可以利用它来判断一个字符串是否“看起来为空”。
String str1 = null;
String str2 = "";
String str3 = " ";
String str4 = " Hello ";
// 判断是否为 null 或 trim() 后为 ""
if (str1 == null || str1.trim().equals("")) {
System.out.println("str1 is blank (null or empty/whitespace)"); // true
}
if (str2 == null || str2.trim().equals("")) {
System.out.println("str2 is blank (null or empty/whitespace)"); // true
}
if (str3 == null || str3.trim().equals("")) {
System.out.println("str3 is blank (null or empty/whitespace)"); // true
}
if (str4 == null || str4.trim().equals("")) {
System.out.println("str4 is blank (null or empty/whitespace)"); // false
}
注意:上面的代码在 str1 为 null 时,str1.trim() 仍然会抛出 NullPointerException,所以必须先判断 null。
更好的方式:StringUtils.isBlank()
如前所述,StringUtils.isBlank() 是处理这种情况的最佳选择,它内部已经做了优化。
// 使用 StringUtils.isBlank() 是最简洁的方式 boolean isBlank = StringUtils.isBlank(str3); // true
总结与最佳实践
| 场景 | 推荐方法 | 代码示例 |
|---|---|---|
判断是否为 null 或 |
Objects.equals() |
Objects.equals(myString, "") |
判断是否为 null, 或纯空白 |
StringUtils.isBlank() |
StringUtils.isBlank(myString) |
需要处理 null 且项目无依赖 |
原生 if 判断 |
if (myString == null || myString.length() == 0) |
仅判断 null |
Objects.isNull() 或 |
Objects.isNull(myString) 或 myString == null |
最终建议:
- 如果你使用 Java 7+,优先使用
Objects.equals(str, "")来判断是否为null或空字符串,这是最现代、最安全的选择。 - 如果你在处理用户输入或需要严格判断“空白”,并且项目允许引入依赖,强烈推荐使用
StringUtils.isBlank(),它的语义最清晰,功能最贴合需求。 - 避免使用 来判断字符串内容是否为空, 判断的是对象的内存地址,而不是字符串的值,只有
str == null是正确的用法。 - 绝对不要在不确定字符串是否为
null的情况下直接调用.equals()或.length()。
