1. ホーム
  2. java

[解決済み] BigDecimal の equals() と compareTo() の比較

2022-04-21 21:47:56

質問

簡単なテストクラスを考えてみましょう。

import java.math.BigDecimal;

/**
 * @author The Elite Gentleman
 *
 */
public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        BigDecimal x = new BigDecimal("1");
        BigDecimal y = new BigDecimal("1.00");
        System.out.println(x.equals(y));
        System.out.println(x.compareTo(y) == 0 ? "true": "false");
    }

}

と(意識的に)言うことができる。 x と同じです。 y (オブジェクト参照ではない) が、プログラムを実行すると、以下のような結果が表示されます。

false
true

質問です。との違いは何ですか? compareTo()equals()BigDecimal その compareTo と判断できる。 x と同じです。 y ?

追記:BigDecimalには inflate() メソッドで equals() メソッドを使用します。は何をするのでしょうか? inflate() を実際に行ってみてください。

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

答えは のJavaDocを参照してください。 equals() メソッド :

とは異なり compareTo このメソッドでは、2つの BigDecimal オブジェクトは、値とスケールが等しい場合にのみ等しくなります(したがって、この方法で比較した場合、2.0は2.00と等しくはなりません)。

言い換えれば equals()BigDecimal オブジェクトは まさに で同じです。 の側面があります。 compareTo() 数値の比較のみ。

については なぜ equals() がこのような挙動を示すことについては、既に回答がなされています。 このSOの質問で .