BigDecimal的equals() 和 compareTo() 方法比较


对于 BigDecimal,当我们同时检查 equals() 和 compareTo() 方法时,事情真的很有趣考虑以下小程序:

BigDecimal x = new BigDecimal("2");
BigDecimal y = new BigDecimal(
"2.00");
System.out.println(x.equals(y));
System.out.println(x.compareTo(y) == 0 ?
"true": "false");

我们可以说 x 等于 y(不是对象引用),运行上面的程序会显示如下

false
true

在检查这一点时我想到的问题之一是“对于 BigDecimal,compareTo 如何确定 x 等于 y,以及 BigDecimal 中的 compareTo() 和 equals() 方法之间有什么区别”
答案在equals() 方法的 JavaDoc 中
将 BigDecimal 与指定的 Object 进行比较是否相等。与 compareTo 不同,此方法仅在两个 BigDecimal 对象的值和比例相等时才认为它们相等(因此,通过此方法进行比较时,2.0 不等于 2.00)。equals 方法考虑了比例
总而言之,equals() 检查 BigDecimal 对象是否相同是每个方面,而 compareTo 只检查数值。
底线是:
使用 compareTo() 而不是 equals() 来比较数值,因为equals()考虑了比例!