应使用 Objects.equals() 比较可能为 null 的字符串,因其内部自动处理 null:同为 null 返回 true,仅一者为 null 返回 false,否则调用 equals(),避免 NullPointerException。

直接用 == 或 .equals() 比较可能为 null 的字符串,容易触发 NullPointerException。而 Objects.equals() 是 Java 7 引入的工具方法,专为安全比较设计——它内部自动处理 null 值,无需额外判空。
Objects.equals() 的核心逻辑
该方法会先判断两个参数是否都为 null(此时返回 true),再判断是否有一个为 null(此时返回 false),最后才调用第一个对象的 .equals() 方法。这样就完全规避了空指针风险。
-
Objects.equals(null, null)→true -
Objects.equals("abc", null)→false -
Objects.equals(null, "abc")→false -
Objects.equals("abc", "abc")→true
替代手写判空的常见写法
过去常写成:str1 == null ? str2 == null : str1.equals(str2),既冗长又易错。用 Objects.equals() 一行搞定,语义清晰、不易出错。
- ✅ 推荐:
if (Objects.equals(strA, strB)) { ... } - ❌ 避免:
strA.equals(strB)(strA 为 null 时崩溃) - ⚠️ 不推荐:
strA != null && strA.equals(strB)(需确保 strB 不为 null 才安全,否则仍可能崩)
注意:它不解决语义或类型问题
Objects.equals() 只保障调用安全,不改变比较逻辑:
- 仍区分大小写(
"ABC"和"abc"判为不等) - 若需忽略大小写,改用
Objects.equals(strA, strB) || (strA != null && strB != null && strA.equalsIgnoreCase(strB)),或先转小写再比 - 若参数类型不同(如 String 和 Integer),
equals()本身返回false,Objects.equals()也一样,不会强转
使用前确认导入
别忘了加 import:
import java.util.Objects;

















