compareTo(),是String类常用的方法,一开始博主以为是比较两个字符串转为整数类型的大小关系,后来发现并不是这样,其真正用法为:
如传入的参数字符串等于当前字符串,则返回值为 0
如当前字符串按字典顺序小于字符串参数,则值小于 0
如当前字符串按字典顺序大于字符串参数,则值大于 0
注:参数字符串,为传入的字符串
所以,其实并不是比较整数的大小,我们可以看一下其源码:
public int compareTo(String anotherString) {
// 获取当前字符串长度 len1,与传入字符串长度 len2
int len1 = value.length;
int len2 = anotherString.value.length;
// 获取两字符串可能的最大公众前缀长度
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
// 循环,判断两个字符串每一位的 ASCII码大小
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
// 两字符串从左往右对比,在该位不同,
// 则通过 ASCII码比较,判断两字符串按字典排序的位子
if (c1 != c2) {
return c1 - c2;
}
k++;
}
// 两字符串有相同的前缀,则通过判断长度来判断两字符串按字典排序的位置
return len1 - len2;
}
举例:
String a = "abcd";
String a1 = "abc";
String a2 = "bc";
System.out.println(a.compareTo(a1));
System.out.println(a.compareTo(a2));
执行代码结果:
a串跟a1串前半部分相同,但长度比b串长,因此返回值大于零
a串跟a2串在第一个不同的位上,a串为 ‘a’,a2串为 ‘b’,'a’的ASCII码小于 ‘b’,因为返回值为负数
而对于比较整数型的大小,就只能借助 Integer.parseInt();
进行