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

banq發表於2021-06-18

對於 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()考慮了比例!
 

相關文章