Java中比较字符串字典序最直接的方式是String.compareTo()方法,它按Unicode码点逐字符比较并返回负数、0或正数,分别表示小于、等于或大于;大小写敏感,忽略大小写可用compareToIgnoreCase()。

Java 中比较两个字符串的字典序大小,最直接、标准的方式是使用 String.compareTo() 方法。它不是判断“是否相等”,而是明确告诉你“谁在字典里排前面、谁排后面”,返回一个整数结果。
compareTo() 的返回值含义
调用 s1.compareTo(s2) 时:
- 返回 负数:表示
s1在字典序中 小于s2(即s1应排在s2前面) - 返回 0:表示两个字符串内容完全相同(逐字符、区分大小写)
- 返回 正数:表示
s1在字典序中 大于s2(即s1应排在s2后面)
比较过程按 Unicode 码点逐字符进行
它不看拼音、不看数字语义、也不按人眼习惯,而是严格从左到右比每个字符的 Unicode 编码值:
- 先比第 0 位字符:比如
"abc".compareTo("bac")→ 'a'(97) vs 'b'(98) → 差值为 -1,立刻返回 -1 - 前面字符都相同,但长度不同:如
"ab".compareTo("abc")→ 前两位一样,但 "ab" 更短 → 返回 2 − 3 = −1 - 完全相同:如
"test".compareTo("test")→ 返回 0
大小写敏感是默认行为
因为大写字母 A–Z 的 Unicode(65–90)比小写字母 a–z(97–122)小,所以 "Zoo" 会排在 "apple" 前面('Z' < 'a')。若需忽略大小写,改用:
立即学习“Java免费学习笔记(深入)”;
s1.compareToIgnoreCase(s2)- 或
String.CASE_INSENSITIVE_ORDER.compare(s1, s2)
实际排序时怎么用
对字符串列表做字典序升序排列,一行就能搞定:
-
list.sort(String::compareTo);(推荐,简洁清晰) -
Collections.sort(list);(等价于上式,因 String 实现了 Comparable) -
Arrays.sort(stringArray);(对数组也适用)


















