常見物件-String類的compareTo()方法的原始碼解析

ZHOU_VIP發表於2017-05-11

package cn.itcast_06;

/*
 * 如果我們看到問題了,看怎麼辦呢?
 * 看原始碼。
 */
public class StringTest {
	public static void main(String[] args) {
		String s1 = "hello";
		String s2 = "hel";
		System.out.println(s1.compareTo(s2)); // 2
	}
}


private final char value[]; 底層:字串會自動轉換為一個字元陣列。

String s1 = "hello";
String s2 = "hel";
System.out.println(s1.compareTo(s2)); // 2

public int compareTo(String anotherString) {
    //this -- s1 -- "hello"
    //anotherString -- s2 -- "hel"
    
    //將s1轉成字元陣列,獲取字元陣列的長度
    int len1 = value.length;                //this.value.length--s1.toCharArray().length--5
    //將s2轉成字元陣列,獲取字元陣列的長度
    int len2 = anotherString.value.length;  //s2.value.length -- s2.toCharArray().length--3
    
    int lim = Math.min(len1, len2);         //Math.min(5,3); -- lim=3;
    
    char v1[] = value;                      //s1.toCharArray()
    char v2[] = anotherString.value;
    
    //char v1[] = {'h','e','l','l','o'};
    //char v2[] = {'h','e','l'};

    int k = 0;
    while (k < lim) {
        char c1 = v1[k];                    //c1='h','e','l'
        char c2 = v2[k];                    //c2='h','e','l'
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    return len1 - len2;                    //5-3=2;
}


相關文章