Java 中字符串类的 CompareTo 的作用

In openjdk/jdk:/srv/java.base/share/classes/java/lang/String.java:Line 2118

In openjdk/jdk:/srv/java.base/share/classes/java/lang/StringLatin1.java:Line 247 compareToUTF16

In openjdk/jdk:/srv/java.base/share/classes/java/lang/StringLatin1.java:Line 254 compareToUTF16Values

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
private static int compareToUTF16Values(byte[] value, byte[] other, int len1, int len2) {
    int lim = Math.min(len1, len2);
    for (int k = 0; k < lim; k++) {
        char c1 = getChar(value, k);
        char c2 = StringUTF16.getChar(other, k);
        if (c1 != c2) {
            return c1 - c2;
        }
    }
    return len1 - len2;
}

大概逻辑是:先取两个字符串最小长度,然后先比较这个最小长度量,一个个字符比较,如果比较不一样,返回第一个的字符减第二个的数值,如果都一样,返回第一个的长度减去第二个长度。

相同长度的一个一个比较,返回差异。不同长度的,前面的不同,按照单个字符的差异度返回,如果相同,则返回长度差。