分析compareTo方法,并去比较“abc”与”aBc”、 “aBc”与”abc”、 “aBc”与”aBc”,根据运行结果再去查看compareTo的系统源代码。
时间: 2023-11-04 18:06:04 浏览: 123
Java中比较运算符compareTo()、equals()与==的区别及应用总结
`compareTo()` 方法是用于比较两个字符串的大小关系的方法,它是在 `Comparable` 接口中定义的。如果两个字符串相等,则返回值为 0。如果 `this` 字符串按字典顺序小于参数字符串,则返回一个负整数。如果 `this` 字符串按字典顺序大于参数字符串,则返回一个正整数。
下面是比较 "abc" 与 "aBc"、"aBc" 与 "abc"、"aBc" 与 "aBc" 的代码及结果:
```java
String str1 = "abc";
String str2 = "aBc";
String str3 = "aBc";
System.out.println(str1.compareTo(str2)); // 32
System.out.println(str2.compareTo(str1)); // -32
System.out.println(str2.compareTo(str3)); // 0
```
可以看出,"abc" 与 "aBc"、"aBc" 与 "abc" 的返回值相反,这是因为 `compareTo()` 方法是按照 ASCII 码值进行比较的。在 ASCII 码表中,小写字母的码值要大于相应的大写字母,因此 "abc" 与 "aBc" 比较时,返回值为 32,表示 "aBc" 比 "abc" 大;而 "aBc" 与 "abc" 比较时,返回值为 -32,表示 "abc" 比 "aBc" 大。
下面是 `compareTo()` 方法的系统源代码:
```java
public int compareTo(String anotherString) {
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;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
```
可以看出,`compareTo()` 方法在比较时,先获取两个字符串的长度,然后取两个字符串长度的最小值,依次比较字符串的每一个字符,如果在某个位置两个字符不相等,则返回它们的 ASCII 码值之差,如果到最后两个字符串都相等,则返回它们长度的差值。
阅读全文