杰瑞科技汇

Java如何判断字符串是否为null?

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

Java如何判断字符串是否为null?-图1
(图片来源网络,侵删)

最直接的方法:使用 比较

这是最基本、最直接的方法,专门用来检查引用是否指向 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 语句

这是最清晰、最推荐的方式,易于阅读和维护。

Java如何判断字符串是否为null?-图2
(图片来源网络,侵删)
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() 方法。

Java如何判断字符串是否为null?-图3
(图片来源网络,侵删)

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 本身就是 nullstr.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) 最佳实践,将逻辑封装,代码更简洁、可复用,避免重复。

核心要点:

  1. 永远用 判断 null
  2. 判断 null 和空时,先用 ,再用 isEmpty(),利用短路效应防止异常。
  3. 对于需要处理空白字符的场景,使用 trim().isEmpty()
  4. 强烈建议将常用的字符串判断逻辑封装成工具类方法,或者直接使用成熟的第三方库(如 Apache Commons Lang)。
分享:
扫描分享到社交APP
上一篇
下一篇