BigDecimal 是一個用於高精度算術運算的類,提供了多種方法來比較兩個 BigDecimal 對象是否相等。
為什麼不推薦使用 ==
首先,需要明確一點:不要使用 == 運算符來比較 BigDecimal 對象。
原因如下:
==比較的是對象的引用(內存地址),而不是對象的值。- 即使兩個
BigDecimal對象的值相同,它們也可能是不同的對象,因此==會返回false。
示例:
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("10");
System.out.println(a == b); // 輸出: false (因為 a 和 b 是不同的對象)
正確的比較方法
BigDecimal 類提供了專門的方法來比較對象的值。
1. 使用 equals() 方法
equals() 方法用於比較兩個 BigDecimal 對象的值和精度是否完全相同。
特點:
- 當且僅當兩個
BigDecimal對象的值相等且精度相同時,equals()才返回true。 - 如果值相同但精度不同,
equals()返回false。
示例:
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("10.0");
System.out.println(a.equals(b)); // 輸出: false (值相同,但精度不同)
BigDecimal c = new BigDecimal("10.00");
BigDecimal d = new BigDecimal("10.00");
System.out.println(c.equals(d)); // 輸出: true (值和精度都相同)
2. 使用 compareTo() 方法
compareTo() 方法用於比較兩個 BigDecimal 對象的數值大小,並返回一個整數:
- 如果調用對象小於參數對象,返回
-1。 - 如果調用對象等於參數對象,返回
0。 - 如果調用對象大於參數對象,返回
1。
特點:
compareTo()只關心數值本身是否相等,不關心精度。- 這是最常用的比較
BigDecimal數值是否相等的方法。
示例:
BigDecimal a = new BigDecimal("10");
BigDecimal b = new BigDecimal("10.0");
BigDecimal c = new BigDecimal("11");
System.out.println(a.compareTo(b)); // 輸出: 0 (數值相等)
System.out.println(a.compareTo(c)); // 輸出: -1 (a 小於 c)
判斷數值是否相等的標準寫法:
if (a.compareTo(b) == 0) {
// 數值相等
} else {
// 數值不相等
}
總結
|
方法
|
用途
|
注意事項
|
|
|
比較對象引用
|
不推薦用於比較 |
|
|
比較值和精度
|
精度不同時,即使值相同也返回 |
|
|
比較數值大小
|
只關心數值,不關心精度,是比較數值相等的推薦方法
|
在實際開發中,如果想判斷兩個 BigDecimal 的數值是否相等,使用 compareTo() 方法,並檢查其返回值是否為 0。