应优先使用 String.equalsIgnoreCase(),它语义清晰、性能更优且自动处理区域设置差异;若手动实现,需对两字符串均调用 toLowerCase(Locale.ROOT) 后用 equals 比较,并注意判空。

直接用 String.toLowerCase() 进行忽略大小写的比较,看似简单,但容易出错。关键在于:必须对两个字符串都调用该方法,再用 equals() 比较,不能混用 == 或忽略区域设置影响。
正确写法:统一转小写后用 equals 比较
这是最常用也最安全的基础方式:
- 先对两个待比较的字符串分别调用
toLowerCase() - 再用
equals()判断内容是否相等(不是==) - 示例:
str1.toLowerCase().equals(str2.toLowerCase())
注意区域设置(Locale),避免土耳其语等特殊情况
toLowerCase() 默认使用 JVM 的默认 Locale,某些语言(如土耳其语)中字母 I 的小写不是 i,而是 ı(无点 i)。这会导致比较意外失败。
- 推荐显式传入
Locale.ROOT或Locale.ENGLISH,确保行为稳定 - 更健壮的写法:
str1.toLowerCase(Locale.ROOT).equals(str2.toLowerCase(Locale.ROOT))
更优替代:优先使用 String.equalsIgnoreCase()
其实 Java 已内置了专为此场景设计的方法,语义清晰、性能更好、自动处理 Locale 边界情况:
- 直接调用
str1.equalsIgnoreCase(str2) - 它内部已做了优化,比手动转小写 + equals 更高效
- 无需关心大小写映射的区域差异,底层已处理
不推荐的写法和常见陷阱
以下方式看似可行,实则隐患明显:
- 用
==比较结果:返回的是新字符串对象引用,一定不等 - 只转其中一个字符串:
str1.toLowerCase().equals(str2)—— 若 str2 含大写字母,结果不可靠 - 忽略 null:若任一字符串为
null,调用toLowerCase()会抛NullPointerException;建议先判空或用Objects.equals()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











