Java原始碼學習-String類的compareTo方法
阿新 • • 發佈:2019-01-04
下面來自jdk中src/java/lang下的String類的compareTo()方法原始碼,反斜線//後面的部分為個人註釋
關於上述程式碼有兩點理解:public int compareTo(String anotherString) { int len1 = count; //當前字串物件的長度 int len2 = anotherString.count; //當前引數字串物件的長度 int n = Math.min(len1, len2); //設定最大比較次數n char v1[] = value; char v2[] = anotherString.value; int i = offset; //當前字串開始位置 int j = anotherString.offset; //當前引數字串開始位置 if (i == j) { //如果當前物件和引數物件的開始位置相同 int k = i; int lim = n + i; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; //返回unicode值的差 } k++; } } else { while (n-- != 0) { char c1 = v1[i++]; char c2 = v2[j++]; if (c1 != c2) { return c1 - c2; } } } return len1 - len2; //當前n個字元都相同時,返回兩個字串的長度的差 }
1.為什麼判斷i==j,是否為了少兩次自增/自減操作(j++/n--)?
2.compareTo方法的實際應用場景。
compareTo來自於java.lang.Comparable介面,如同其API中方法的第一句註釋說明:Compares the object with the specified object for order.可見此方法的目的實際為提供一種確定兩個物件先後順序的方法,這樣需要我們去自定義何為“先”,何為“後”的概念(區別於Object類的equals方法,其目的為比較兩個物件是否相同)。
規則可參照java.lang.Comparable介面原碼的註釋部分。