String compareTo原始碼

value[]

String字串是用value[]來儲存字串。

1
2
3
4
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    private final char value[];
}

compareTo()

比較步驟如下:

1.取出2字串長度
     ↓
2.取得2個字串最小長度
     ↓
3.先比較最小長度內,每個字元是否相等
     ↓
4.字元不相等就傳回字元相減的結果
     ↓
5.若最小長度內的字元都相等
     ↓
6.傳回長度相減。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public int compareTo(String anotherString) {
    // 1.取出2字串長度
    int len1 = value.length;
    int len2 = anotherString.value.length;
    
    // 2.取得2個字串最小長度
    int lim = Math.min(len1, len2);

    char v1[] = value;
    char v2[] = anotherString.value;

    // 3.先比較最小長度內,每個字元是否相等
    int k = 0;
    while (k < lim) {
        char c1 = v1[k];
        char c2 = v2[k];
        // 4.字元不相等就傳回字元相減的結果
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    // 5.若最小長度內的字元都相等
    // 6.傳回長度相減
    return len1 - len2;
}

情況1

4.字元不相等就傳回字元相減的結果

value = abcdefg
another = abdd

結果為c(99) - d(100) = -1

程式碼

1
2
3
String value = "abcdefg";
String another = "abdd";
int result = value.compareTo(another);

-1

情況2

以下二個字串前4個字元都一樣,只有長度不同。
5.若最小長度內的字元都相等
6.傳回長度相減

value = abcdefg
another = abcd

傳回3

程式碼

1
2
3
4
String value = "abcdefg";
String another = "abcd";
int result = value.compareTo(another);
System.out.println(result);

3

情況3

以下二個字串前4個字元都一樣,只有長度不同。
5.若最小長度內的字元都相等
6.傳回長度相減

value = abcd
another = abcdfg

傳回-2

1
2
3
4
String value = "abcd";
String another = "abcdfg";
int result = value.compareTo(another);
System.out.println(result);

-2

results matching ""

    No results matching ""