-1

"xyz".compareTo("abc")--->23

"abc".compareTo("xyz")--->-23

この数値の計算方法を知る必要があります。この値の用途は何ですか

4

5 に答える 5

7

ソース コードを見て、ドキュメンテーションを参照してください。これには、Compares two strings lexicographicallyと書かれています。比較は、文字列内の各文字の Unicode 値に基づいています。

public int compareTo(String anotherString) {
    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;
    while (k < lim) {
        char c1 = v1[k];
        char c2 = v2[k];
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    return len1 - len2;
}

ケース 1: "xyz".compareTo("abc")

'x'-'a'23 に等しい値を返します。

ケース 2: "abc".compareTo("xyz")

'a'-'x'-23 に等しい値を返します。

于 2013-05-01T08:06:01.493 に答える
3

値の大きさは無関係であり、一般的に依存すべきではありません。の正確な値は文書化されてString.compareToいますが、それ自体が設計ミスだと思います。違いが賢明な方法で使用できるわけではなく、詳細は異なりますが、の契約に従うことができる後の実装を制限しますComparable:((完全に指定されているという事実String.hashCodeは同様の間違いです。)

順序比較で重要なのは、値が 0 未満か、0 か、0 より大きいかだけです。

のドキュメントからComparable.compareTo:

戻り値:
このオブジェクトが指定されたオブジェクトよりも小さい、等しい、または大きい場合、負の整数、ゼロ、または正の整数。

于 2013-05-01T08:07:42.290 に答える