介绍
在 Java 中,字符串(String)的比较不能直接使用 >、>=、<、<= 等运算符(这些运算符仅适用于基本数据类型),而是需要通过 String 类提供的 compareTo() 方法或 compareToIgnoreCase() 方法实现,根据返回值判断大小关系。
compareTo() 方法
该方法用于按 字典顺序(类似字典中单词的排序规则,基于字符的 Unicode 值)比较两个字符串,返回一个 整数,表示两个字符串的大小关系:
- 返回值 < 0:当前字符串小于目标字符串(
this < anotherString) - 返回值 = 0:当前字符串等于目标字符串(
this == anotherString) - 返回值 > 0:当前字符串大于目标字符串(
this > anotherString)
例子
public static void main(String[] args) {
// 负数,表示当前字符串比形参小
int i = "1".compareTo("2");
Out.println("",i);
// 正数,表示当前字符串比形参大
i = "2".compareTo("1");
Out.println("",i);
// 0 表示相等
i = "2".compareTo("2");
Out.println("",i);
// 如果字符串前几位相同,那么字符串长的更大
i = "2".compareTo("222");
Out.println("",i);
}
1. 基本用法(区分大小写)
public class StringCompare {
public static void main(String[] args) {
String s1 = "apple";
String s2 = "banana";
String s3 = "apple";
String s4 = "AppLe"; // 大小写不同
// 比较 s1 和 s2
int result1 = s1.compareTo(s2);
if (result1 < 0) {
System.out.println(s1 + " < " + s2); // apple < banana(正确,a 在 b 前)
}
// 比较 s1 和 s3(相等)
int result2 = s1.compareTo(s3);
if (result2 == 0) {
System.out.println(s1 + " == " + s3); // apple == apple(正确)
}
// 比较 s1 和 s4(区分大小写,'A' 的 Unicode 小于 'a')
int result3 = s1.compareTo(s4);
if (result3 > 0) {
System.out.println(s1 + " > " + s4); // apple > AppLe(正确,'a' 比 'A' 大)
}
}
}
2. 忽略大小写比较:compareToIgnoreCase(String str)
如果需要忽略大小写(如 A 和 a 视为相等),使用 compareToIgnoreCase(),逻辑与 compareTo() 一致:
String s1 = "apple";
String s4 = "AppLe";
int result = s1.compareToIgnoreCase(s4);
if (result == 0) {
System.out.println(s1 + " 忽略大小写后等于 " + s4); // 输出:apple 忽略大小写后等于 AppLe
}
3. 实现大于、大于等于、小于、小于等于
基于 compareTo() 的返回值,可以封装判断逻辑:
public class StringComparison {
public static void main(String[] args) {
String a = "hello";
String b = "world";
String c = "hello";
// 小于(a < b)
boolean isLess = a.compareTo(b) < 0;
System.out.println(a + " < " + b + ":" + isLess); // hello < world:true
// 小于等于(a <= c)
boolean isLessOrEqual = a.compareTo(c) <= 0;
System.out.println(a + " <= " + c + ":" + isLessOrEqual); // hello <= hello:true
// 大于(b > a)
boolean isGreater = b.compareTo(a) > 0;
System.out.println(b + " > " + a + ":" + isGreater); // world > hello:true
// 大于等于(c >= a)
boolean isGreaterOrEqual = c.compareTo(a) >= 0;
System.out.println(c + " >= " + a + ":" + isGreaterOrEqual); // hello >= hello:true
}
}
注意事项
- 字典顺序规则:比较时从第一个字符开始逐位比较 Unicode 值,遇到不同字符时立即返回结果。例如
"app"<"apple"(短字符串在长字符串前,且前面字符相同)。 - 空字符串:与空字符串比较时,非空字符串总是更大。例如
"a".compareTo("") > 0。 - 避免
==运算符:==用于判断两个字符串是否为同一个对象(内存地址相同),而非内容相等。内容比较需用equals()或compareTo() == 0。
通过 compareTo() 方法的返回值,即可完整实现字符串的大于、大于等于、小于、小于等于的比较逻辑。
实现原理
字符串实现 Comparable 接口
接口方法
实现 Comparable 接口后,需要重写下面方法:
public int compareTo(T o);
