現在参画しているプロジェクトでBigDecimalでの値比較であるequalsとcompareToの仕様の違いで不具合が発生していました。
備忘録としてここにまとめます。
まずは以下のプログラムを実行してみてください。
import java.math.BigDecimal;
public class BigIntegerTest {
public static void main(String[] args) {
var zero1 = new BigDecimal("0");
var zero2 = new BigDecimal("0.0");
System.out.println(zero1.compareTo(zero2) == 0); // true
System.out.println(zero1.equals(zero2)); // false
}
}
zero1とzero2、どちらも数値としては0を意味しています。
しかし、コメントに書いた通りcompareToでは同じものとして扱われ、equalsではfalseを返します。
compareToは数値的な意味での比較を行うのですが、equalsではスケールを含めた比較をするのです。
どちらもケースバイケースで使うことになるでしょう。しかし、数値として利用することが多いでしょうから、基本的な選択としてはcompareToにしたほうが無難なはずです。
おすすめ記事
日々勉強を積み重ねているあなたなら、今より仕事の待遇をよくできるかもしれません。
長期ブランクがあった私が会社との条件交渉を成功させて方法を参考にしてみませんか?
独立を考えているなら、テックビズをお勧めしています。私自身は現在会社員なのですが、一時相談した際営業さんが誠実に対応してくれました。
コメント