1. ホーム
  2. java

[解決済み] Java Integer compareTo() - なぜ比較と引き算を使い分けるのか?

2023-05-04 06:01:15

質問

私は、以下のことを発見しました。 java.lang.Integer の実装は compareTo メソッドの実装は以下のようになります。

public int compareTo(Integer anotherInteger) {
    int thisVal = this.value;
    int anotherVal = anotherInteger.value;
    return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
}

問題は、なぜ引き算ではなく、比較を使うのかということです。

return thisVal - anotherVal;

どのように解決するのですか?

整数のオーバーフローが原因です。いつ thisVal が非常に大きく、かつ anotherVal が負なら、前者から後者を引くと、結果は thisVal よりも大きくなり、負の範囲にオーバーフローする可能性があります。