1. 用 “==”比較
- 代碼示例
BigDecimal bigDecimal1 = BigDecimal.valueOf(0.00);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.00);
System.out.println(bigDecimal1 == bigDecimal2);
- 比較結(jié)果
false
-
原因
因為BigDecimal是對象,所以不能用==來判斷兩個數(shù)字的值是否相等。
2. 用 “equals”比較
- 代碼示例1
BigDecimal bigDecimal1 = BigDecimal.valueOf(0.00);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.00);
System.out.println(bigDecimal1.equals(bigDecimal2));
- 比較結(jié)果
true
- 代碼示例2
BigDecimal bigDecimal1 = BigDecimal.valueOf(0);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.0);
System.out.println(bigDecimal1.equals(bigDecimal2));
- 比較結(jié)果
false
-
原因
equals方法會比較兩部分內(nèi)容,分別是值(value)和精度(scale),源碼如下
image.png
3. 用 “compareTo”比較
- 代碼示例1
BigDecimal bigDecimal1 = BigDecimal.valueOf(0);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.0);
System.out.println(bigDecimal1.compareTo(bigDecimal2));
- 比較結(jié)果
0
-
原因
BigDecimal中提供了compareTo方法,這個方法就可以只比較兩個數(shù)字的值,如果兩個數(shù)相等,則返回0,源碼如下。
image.png
總結(jié)
BigDecimal是一個非常好用的表示高精度數(shù)字的類,其中提供了很多豐富的方法。但是,他的equals方法使用的時候需要謹(jǐn)慎,因為他在比較的時候,不僅比較兩個數(shù)字的值,還會比較他們的精度,只要這兩個因素有一個是不相等的,那么結(jié)果也是false、如果讀者想要對兩個BigDecimal的數(shù)值進行比較的話,可以使用compareTo方法。

