使用 String.equalsIgnoreCase() 方法
这是最直接、最常用的方法,专门用于不区分大小写的字符串比较。

语法
boolean equalsIgnoreCase(String anotherString)
特点
- 不区分大小写:
"Hello".equalsIgnoreCase("hello")返回true。 - 性能较好:直接在
String类中实现,效率较高。 - 适用于简单比较:如果只是简单判断两个字符串是否相等(忽略大小写),推荐使用此方法。
示例
String str1 = "Hello"; String str2 = "hello"; String str3 = "world"; System.out.println(str1.equalsIgnoreCase(str2)); // true System.out.println(str1.equalsIgnoreCase(str3)); // false
使用 String.compareToIgnoreCase() 方法
如果除了比较是否相等外,还需要知道字符串的字典序(忽略大小写),可以使用 compareToIgnoreCase()。
语法
int compareToIgnoreCase(String str)
特点
- 返回值:
0:两个字符串相等(忽略大小写)。< 0:当前字符串字典序小于参数字符串。> 0:当前字符串字典序大于参数字符串。
- 适用于排序或字典序比较。
示例
String str1 = "Apple";
String str2 = "apple";
String str3 = "Banana";
System.out.println(str1.compareToIgnoreCase(str2)); // 0 (相等)
System.out.println(str1.compareToIgnoreCase(str3)); // -1 ("Apple" < "Banana" 忽略大小写)
使用 String.toUpperCase() 或 String.toLowerCase() 转换后比较
如果需要在比较前统一转换大小写,可以先将字符串转换为大写或小写,再使用 equals() 比较。
示例
String str1 = "Hello"; String str2 = "hello"; // 转换为小写后比较 boolean isEqualIgnoreCase = str1.toLowerCase().equals(str2.toLowerCase()); System.out.println(isEqualIgnoreCase); // true // 转换为大写后比较 boolean isEqualIgnoreCase2 = str1.toUpperCase().equals(str2.toUpperCase()); System.out.println(isEqualIgnoreCase2); // true
特点
- 灵活性高:可以在转换后进行其他操作。
- 性能稍差:需要创建新的字符串对象(
toUpperCase()或toLowerCase()会返回新字符串)。 - 适用于需要额外处理的情况(如统一大小写后进行其他操作)。
使用 Collator(适用于国际化场景)
如果涉及多语言环境(如土耳其语等特殊大小写规则),可以使用 java.text.Collator 进行更严谨的比较。
示例
import java.text.Collator; import java.util.Locale; String str1 = "Hello"; String str2 = "hello"; Collator collator = Collator.getInstance(Locale.ENGLISH); collator.setStrength(Collator.PRIMARY); // 忽略大小写 boolean isEqual = collator.equals(str1, str2); System.out.println(isEqual); // true
特点
- 支持国际化:适用于多语言环境,能正确处理特殊语言的排序规则(如土耳其语)。
- 性能较低:比
equalsIgnoreCase()慢,适用于复杂场景。
使用 Apache Commons Lang 的 StringUtils.equalsIgnoreCase()
如果项目中使用了 Apache Commons Lang 库,可以使用 StringUtils.equalsIgnoreCase()。

依赖(Maven)
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
示例
import org.apache.commons.lang3.StringUtils; String str1 = "Hello"; String str2 = "hello"; boolean isEqual = StringUtils.equalsIgnoreCase(str1, str2); System.out.println(isEqual); // true
特点
- 代码简洁:方法名更明确。
- 需要额外依赖:适用于已引入 Commons Lang 的项目。
如何选择?
| 方法 | 适用场景 | 性能 | 备注 |
|---|---|---|---|
equalsIgnoreCase() |
简单比较是否相等(忽略大小写) | 推荐,最直接 | |
compareToIgnoreCase() |
需要字典序比较 | 适用于排序 | |
toUpperCase().equals() |
需要统一大小写后操作 | 灵活性高,但稍慢 | |
Collator |
国际化、多语言支持 | 适用于复杂场景 | |
StringUtils.equalsIgnoreCase() |
已使用 Commons Lang | 依赖外部库 |
推荐选择
- 一般情况下:直接使用
String.equalsIgnoreCase()。 - 需要字典序比较:使用
compareToIgnoreCase()。 - 国际化需求:使用
Collator。 - 已有 Commons Lang 依赖:使用
StringUtils.equalsIgnoreCase()。
注意事项
- 空指针异常:如果字符串可能为
null,建议使用Objects.equals()或StringUtils.equals()避免NullPointerException。// 安全比较(避免 NPE) boolean isEqual = (str1 == null && str2 == null) || (str1 != null && str1.equalsIgnoreCase(str2)); - 性能:
equalsIgnoreCase()比toUpperCase().equals()更高效,因为它不会创建新字符串。 - 特殊语言规则:土耳其语等语言的
i和 的大小写规则不同,此时应使用Collator。
希望这些方法能帮助你根据实际需求选择合适的字符串比较方式!
