ホームページ >Java >&#&チュートリアル >Java Integer CompareTo(): なぜ減算ではなく比較を行うのでしょうか?

Java Integer CompareTo(): なぜ減算ではなく比較を行うのでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-13 03:35:08887ブラウズ

Java Integer compareTo(): Why Comparison, Not Subtraction?

Java Integer CompareTo(): 減算ではなく比較を行う理由

Java の Integer クラスの CompareTo() メソッドは、2 つの Integer を比較するように設計されています。オブジェクト。興味深いのは、この目的のために減算の代わりに比較演算子を使用していることです。この選択の背後にある理由を調べてみましょう。

整数オーバーフロー

2 つの整数を比較する場合、特に大きな値や負の値を扱う場合、減算を使用すると整数オーバーフローが発生する可能性があります。これは、減算では最初の値から 2 番目の値を減算する必要があり、データ型で表現できる整数の範囲外の結果が生成される可能性があるためです。

次の例を考えてみましょう:

int thisVal = Integer.MAX_VALUE;
int anotherVal = -1;
int diff = thisVal - anotherVal; // Overflow occurs

この場合、thisVal の値は整数の最大値 (2^31 - 1) であり、anotherVal は負の値です。前者から後者を減算すると、2^31 - 1 より大きい結果が生成され、整数オーバーフローが発生し、不正確な比較結果が発生します。

比較演算子

比較演算子 (<、>、== など) を使用すると、前述のオーバーフローの問題を回避できます。これらの演算子は、算術演算を実行せずに、2 つの値のビットを直接比較します。これにより、結果がオーバーフローすることがなくなり、オペランド間の関係が正確に表現されます。

実装

Integer クラスの CompareTo() の実装では、これが考慮されています。そして次のロジックを使用します:

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

この実装では 3 項条件演算子 (?:) を使用します。 thisVal と anotherVal の値に基づいて比較結果を決定します。これにより、整数オーバーフローを引き起こすことなく正しい結果が返されることが保証されます。

以上がJava Integer CompareTo(): なぜ減算ではなく比較を行うのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。