对于 BigDecimal,当我们同时检查 equals() 和 compareTo() 方法时,事情真的很有趣考虑以下小程序:
BigDecimal x = new BigDecimal("2"); |
我们可以说 x 等于 y(不是对象引用),运行上面的程序会显示如下
false |
在检查这一点时我想到的问题之一是“对于 BigDecimal,compareTo 如何确定 x 等于 y,以及 BigDecimal 中的 compareTo() 和 equals() 方法之间有什么区别”
答案在equals() 方法的 JavaDoc 中:
将 BigDecimal 与指定的 Object 进行比较是否相等。与 compareTo 不同,此方法仅在两个 BigDecimal 对象的值和比例相等时才认为它们相等(因此,通过此方法进行比较时,2.0 不等于 2.00)。equals 方法考虑了比例
总而言之,equals() 检查 BigDecimal 对象是否相同是每个方面,而 compareTo 只检查数值。
底线是:
使用 compareTo() 而不是 equals() 来比较数值,因为equals()考虑了比例!