1. 概述

在日常开发中,我们经常需要比较两个字符串是否相等,而忽略它们的大小写差异。本文将带你快速掌握 Java 中实现“忽略大小写字符串比较”的常用方式,帮你避开一些看似简单却容易踩坑的细节。

2. 使用 equalsIgnoreCase() 方法

equalsIgnoreCase()String 类自带的方法,用于判断两个字符串在忽略大小写的情况下是否相等。它接收一个 String 参数,返回 boolean

✅ 用法简单粗暴,适合大多数场景:

String lower = "equals ignore case";
String UPPER = "EQUALS IGNORE CASE";

assertThat(lower.equalsIgnoreCase(UPPER)).isTrue();

⚠️ 注意:如果传入的参数为 null,该方法会直接返回 false,**不会抛出 NullPointerException**。这一点和其他字符串方法(如 equals())行为一致,但容易被忽视。

例如:

String str = "hello";
assertThat(str.equalsIgnoreCase(null)).isFalse(); // 不会报错,返回 false

所以,如果你不确定输入是否可能为 null,这个行为是安全的。但如果你希望显式处理 null,就需要额外判断。

3. 使用 Apache Commons Lang

如果你的项目中已经引入了 Apache Commons Lang,推荐使用 StringUtils.equalsIgnoreCase() 方法。

✅ 最大的优势是:明确支持 null 安全比较,语义更清晰,代码可读性更强。

String lower = "equals ignore case"; 
String UPPER = "EQUALS IGNORE CASE"; 

assertThat(StringUtils.equalsIgnoreCase(lower, UPPER)).isTrue();
assertThat(StringUtils.equalsIgnoreCase(lower, null)).isFalse();
assertThat(StringUtils.equalsIgnoreCase(null, null)).isTrue();  // 两个 null 被认为是相等的

📌 小结对比:

方式 是否支持 null 推荐场景
String.equalsIgnoreCase() ✅ 安全(返回 false) 简单场景,已知非 null
StringUtils.equalsIgnoreCase() ✅ 更清晰的 null 语义 通用推荐,尤其参数可能为 null

💡 建议:在工具类、API 接口或参数来源不确定的场景下,优先使用 StringUtils,避免歧义。

4. 总结

equalsIgnoreCase() 是处理忽略大小写字符串比较最直接的方式,JDK 原生支持,性能良好。而 StringUtils.equalsIgnoreCase() 在 null 处理上更优雅,适合对代码健壮性要求较高的项目。

✅ 推荐做法:

  • 日常开发中,能用 equalsIgnoreCase() 就用,简单高效。
  • 在公共 API、服务层或参数不可控时,建议使用 StringUtils,提升代码容错性。

⚠️ 注意:以上方法都基于默认 Locale 进行大小写转换。如果你的应用涉及多语言(如土耳其语中 'i''I' 的规则特殊),可能会出现意料之外的结果。这种情况下需要使用 Locale 感知的比较方式(例如 String.toLowerCase(Locale.TURKISH)),我们后续会专门讲解国际化下的字符串处理踩坑实践。

所有示例代码均已上传至 GitHub:https://github.com/johnchen/my-java-demos/tree/main/string-case-compare


原始标题:Java String equalsIgnoreCase()