推荐使用 String.equalsIgnoreCase() 而非 toLowerCase/UpperCase + equals,因其内部优化支持 Unicode 大小写映射(如土耳其语 I/i),不受 Locale 影响,且更安全高效;但需注意 null 安全,建议用 "str".equalsIgnoreCase(target) 或 Objects.equals() 配合手动忽略大小写处理。

String.equalsIgnoreCase() 是 Java 中专门用来忽略大小写比较两个字符串是否相等的方法,它比先转成统一大小写再用 equals() 更安全、更高效。
为什么推荐用 equalsIgnoreCase 而不是 toLowerCase/UpperCase + equals
直接调用 equalsIgnoreCase() 内部已做优化,能正确处理 Unicode 大小写映射(比如土耳其语的 I/i 特殊规则),而手动调用 toLowerCase() 可能因区域设置(Locale)不同导致意外结果。例如:
- 在土耳其 Locale 下,
"I".toLowerCase()会变成"ı"(无点 i),而非"i"; -
"I".equalsIgnoreCase("i")则始终返回true,不受 Locale 影响。
基本用法:直接比较两个字符串
语法简单,无需预处理:
String s1 = "Hello"; String s2 = "HELLO"; boolean result = s1.equalsIgnoreCase(s2); // true
注意:equalsIgnoreCase() 对 null 不安全 —— 如果调用对象是 null,会抛出 NullPointerException。所以实际使用中建议先判空:
立即学习“Java免费学习笔记(深入)”;
- 推荐写法:
Objects.equals(str1, str2)(自动处理 null)+ 配合手动忽略大小写逻辑,或 - 稳妥写法:
str1 != null && str1.equalsIgnoreCase(str2)
和 ==、equals 的关键区别
== 比较引用,equals() 区分大小写,equalsIgnoreCase() 才真正按字符内容忽略大小写判断:
-
"abc" == "ABC"→false(引用不同) -
"abc".equals("ABC")→false(大小写敏感) -
"abc".equalsIgnoreCase("ABC")→true(忽略大小写)
常见误区提醒
不要链式调用可能返回 null 的方法后再调用 equalsIgnoreCase():
- ❌ 错误:
getUserInput().equalsIgnoreCase("yes")(如果getUserInput()返回 null,直接 NPE) - ✅ 正确:
"yes".equalsIgnoreCase(getUserInput())(把字面量放前面,避免空指针)
这种写法利用了“常量字符串非 null”的特性,是业界常用的安全习惯。


















