String.compareToIgnoreCase()用于忽略大小写比较字符串,返回负数、0或正数分别表示字典序小于、等于或大于;适用于排序和相对顺序判断,但需防null异常,国际化场景建议用Collator。

String.compareToIgnoreCase() 是 Java 中用于忽略大小写比较两个字符串的方法,返回一个整数表示比较结果:负数表示调用方字符串字典序小于参数字符串,0 表示相等,正数表示大于。
基本用法和返回值含义
该方法按 Unicode 值逐字符比较(忽略大小写),不区分英文字母的大小写。例如 'A' 和 'a' 被视为相同。
- str1.compareToIgnoreCase(str2) == 0 → 两个字符串内容相同(忽略大小写)
- 返回负数 → str1 在字典序中排在 str2 前面
- 返回正数 → str1 在字典序中排在 str2 后面
常见使用场景
常用于登录验证、配置项匹配、菜单选项判断等需要忽略大小写的字符串比较场合。
- 用户输入 "YES"、"yes" 或 "Yes" 都视为同意:
"yes".equalsIgnoreCase(userInput)更常用,但compareToIgnoreCase适合需要排序或获取相对顺序时 - 对字符串列表按忽略大小写排序:
list.sort(String::compareToIgnoreCase) - 判断是否为某个关键词(不区分大小写)且需同时知道前后关系时,比如构建有序查找逻辑
注意事项和陷阱
该方法会抛出 NullPointerException 如果任一字符串为 null,需提前判空。
立即学习“Java免费学习笔记(深入)”;
- 不能直接对 null 调用:
str1.compareToIgnoreCase(str2)中 str1 为 null 就会报错 - 推荐安全写法:
Objects.compare(s1, s2, String::compareToIgnoreCase)(Java 9+)或手动判空 - 只对 ASCII 字母和部分 Unicode 字符做大小写映射,某些语言(如土耳其语)的特殊规则不适用,国际化场景建议用
Collator
对比 equalsIgnoreCase 的选择
如果只需要判断是否相等,用 equalsIgnoreCase() 更直观、可读性更好;如果需要排序、获取相对顺序或实现 Comparator,compareToIgnoreCase() 更合适。
- 相等性判断优先用
str1.equalsIgnoreCase(str2) - 排序或比较逻辑中直接传递方法引用:
Arrays.sort(arr, String::compareToIgnoreCase) - 自定义比较器中可封装:
(s1, s2) -> s1.compareToIgnoreCase(s2)


















