杰瑞科技汇

Java判断String为空有哪些方法?

在 Java 中,判断一个 String 对象是否为“空”是一个常见且重要的操作,这里的“空”通常有两种含义:

Java判断String为空有哪些方法?-图1
(图片来源网络,侵删)
  1. 值为 null:该变量没有指向任何 String 对象。
  2. 空字符串 :该变量指向一个 String 对象,但这个对象不包含任何字符。

一个健壮的判断逻辑需要同时处理这两种情况。

下面我将从最推荐的方法到其他可行方法,为你详细解释。


最推荐的方法:使用 java.util.Objects (Java 7+)

这是现代 Java 开发中最推荐、最简洁、最安全的方法,它专门用于处理对象为 null 的情况。

import java.util.Objects;
public class StringIsEmptyExample {
    public static void main(String[] args) {
        String str1 = null;
        String str2 = "";
        String str3 = "Hello";
        String str4 = " "; // 包含空格的字符串,通常不算空
        // 使用 Objects.equals()
        // Objects.equals(a, b) 的逻辑是: a == b || (a != null && a.equals(b))
        // 所以当 str 为 null 时,Objects.equals(str, "") 会返回 false,但我们要的是 true
        // 更通用的写法是:
        boolean isStr1Empty = Objects.equals(str1, "");
        boolean isStr2Empty = Objects.equals(str2, "");
        boolean isStr3Empty = Objects.equals(str3, "");
        boolean isStr4Empty = Objects.equals(str4, "");
        System.out.println("str1 is empty: " + isStr1Empty); // true
        System.out.println("str2 is empty: " + isStr2Empty); // true
        System.out.println("str3 is empty: " + isStr3Empty); // false
        System.out.println("str4 is empty: " + isStr4Empty); // false
        // 如果你想同时判断 null 和 "",可以组合使用
        boolean isStr1NullOrEmpty = str1 == null || str1.isEmpty();
        boolean isStr2NullOrEmpty = str2 == null || str2.isEmpty();
        System.out.println("str1 is null or empty: " + isStr1NullOrEmpty); // true
        System.out.println("str2 is null or empty: " + isStr2NullOrEmpty); // true
    }
}

优点:

Java判断String为空有哪些方法?-图2
(图片来源网络,侵删)
  • 代码简洁:一行代码搞定。
  • 线程安全Objects 是工具类,方法都是静态的,非常安全。
  • NPE 安全:不会因为 strnull 而抛出 NullPointerException

经典方法:String.isEmpty() (Java 6+)

String.isEmpty()String 类的一个实例方法,它只判断字符串的长度是否为 0。它不能处理 null 的情况,如果对一个 null 字符串调用此方法,会抛出 NullPointerException

使用时必须先进行 null 检查。

public class StringIsEmptyExample {
    public static void main(String[] args) {
        String str1 = null;
        String str2 = "";
        String str3 = "Hello";
        // 正确的写法:先判断是否为 null,再判断是否为空
        boolean isStr1Empty = (str1 == null) || (str1.isEmpty());
        boolean isStr2Empty = (str2 == null) || (str2.isEmpty());
        boolean isStr3Empty = (str3 == null) || (str3.isEmpty());
        System.out.println("str1 is empty: " + isStr1Empty); // true
        System.out.println("str2 is empty: " + isStr2Empty); // true
        System.out.println("str3 is empty: " + isStr3Empty); // false
        // 错误的写法,会抛出 NullPointerException
        // boolean isStr1EmptyWrong = str1.isEmpty(); 
    }
}

优点:

  • 语义清晰isEmpty() 这个方法名非常直观地表达了“字符串长度为0”的含义。
  • 性能好:直接检查内部用于存储字符的数组的长度,非常高效。

缺点:

Java判断String为空有哪些方法?-图3
(图片来源网络,侵删)
  • 必须手动处理 null:容易忘记,导致 NPE

其他方法(不推荐,但需要了解)

a. 检查长度 str.length() == 0

String.length() 方法返回字符串的长度,一个空字符串 的长度就是 0。

String str = "";
boolean isEmpty = (str == null) || (str.length() == 0);

这与 str.isEmpty() 在功能上是等价的。isEmpty() 是 Java 6 引入的,它本质上就是 length() == 0 的一个语法糖,让代码更易读。推荐优先使用 isEmpty()

b. 使用 StringUtils (Apache Commons Lang / Spring)

如果你已经在使用 Apache Commons Lang 或 Spring 框架,它们的工具类提供了非常方便的方法。

Apache Commons Lang:

import org.apache.commons.lang3.StringUtils;
String str = null;
// isBlank() 不仅判断 null 和 "",还会判断 "   " (全空格)
boolean isBlank = StringUtils.isBlank(str); // true
// isEmpty() 只判断 null 和 ""
boolean isEmpty = StringUtils.isEmpty(str); // true

Spring Framework:

import org.springframework.util.StringUtils;
String str = null;
// StringUtils.isEmpty() 等同于 (str == null || str.length() == 0)
boolean isEmpty = StringUtils.isEmpty(str); // true

优点:

  • 非常方便,一行代码解决所有问题。
  • Apache 的 isBlank() 功能更强大,能处理全为空格的情况。

缺点:

  • 引入外部依赖:如果你的项目不依赖这些库,为了一个简单功能而引入整个库是不划算的。

总结与最佳实践

方法 优点 缺点 适用场景
Objects.equals(str, "") 简洁、安全、无 NPE 风险 需要记住 Objects.equals 的特殊逻辑 现代 Java (7+) 项目中的首选
(str == null) || str.isEmpty() 语义清晰、高效 需要手动写两行逻辑,易忘 null 检查 Java 6+ 项目,或需要极致可读性的代码
StringUtils.isEmpty(str) 极其方便,功能强大(如 isBlank 引入外部依赖 项目已依赖 Apache Commons Lang 或 Spring
str.length() == 0 效率高 语义不如 isEmpty() 清晰 不推荐,除非在非常古老的 Java 版本中

最佳实践建议:

  1. 对于 Java 7 及以上版本

    • 如果只是简单判断 null 或 ,使用 Objects.equals(str, "")
    • 如果想表达“判断字符串是否为空或空白”,使用 StringUtils.isBlank(str) (如果已引入依赖)。
  2. 对于 Java 6 或更早版本

    • 使用 (str == null) || str.isEmpty(),这是最安全、最清晰的标准写法。
  3. 代码风格

    在团队开发中,保持一致性非常重要,选择一种团队都认可的方式并坚持下去。

  4. 注意“空白字符串” vs “空字符串”

    • 空字符串 ():长度为 0。
    • 空白字符串 (, "\t", "\n"):长度大于 0,但只包含空白字符。
    • 如果你的业务逻辑需要区分这两者,请仔细选择方法。isEmpty() 只判断前者,而 StringUtils.isBlank() 会判断后者。
分享:
扫描分享到社交APP
上一篇
下一篇