web-dev-qa-db-ja.com

compareToはどのように機能しますか?

compareToは、一方の文字列がもう一方の文字列とどの程度相関しているかについて、否定的または肯定的な結果を返すことを知っていますが、その理由は次のとおりです。

public class Test {
    public static void main(String[] args) {
        String y = "ab2";
        if(y.compareTo("ac3") == -1) {
            System.out.println("Test");
        }
    }
}

真実であり、

public class Test {
    public static void main(String[] args) {
        String y = "ab2";
        if(y.compareTo("ab3") == -1) {
            System.out.println("Test");
        }
    }
}

本当ですか?

9
Harsh

Comparable.compareTo(o) の一般的な契約は

  • これが他のオブジェクトよりも大きい場合は正の整数。
  • これが他のオブジェクトよりも低い場合は負の整数。
  • これが他のオブジェクトと等しい場合は0。

あなたの例では、"ab2".compareTo("ac3") == -1"ab2".compareTo("ab3") == -1唯一の意味 _"ab2"_が_"ac3"_と_"ab3"_の両方よりも低いことを意味します。これらの例だけでは、_"ac3"_と_"ab3"_に関して何も結論付けることはできません。

アルファベットではbcの前にあり(つまり_"ab2" < "ac3"_)、_2_が_3_の前にある(つまり_"ab2" < "ab3"_ ):Java文字列をソートします 辞書式順序で

10
Tunaki

compareTosのStringは、最初のString(メソッドが呼び出される)が2番目のString(メソッドの引数)の前にある場合、-1を返します。辞書式順序で。 「ab2」は「ab3」の前(最初の2文字が等しく、2が3の前にあるため)および「ac3」の前(最初の文字が等しく、bがcの前にあるため)であるため、両方の比較で-1が返されます。

1
Eran

compareTo()は、アルファベット順に関して2つの文字列を比較します。両方のテストには、比較する文字列の「前」にアルファベット順にソートされた文字列があります。言い換えると:

  • ab2 <ac3(b <cのため)
  • ab2 <ab3(2 <3のため)

ちなみに、compareTo仕様では、関数は特に「-1」ではなく負の数を返すと記述されているため、ifステートメントでは「==-1」ではなく「<0」を使用する必要があります。

1
alcfeoh