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();
進行