1. 用 “==”比较
- 代码示例
BigDecimal bigDecimal1 = BigDecimal.valueOf(0.00);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.00);
System.out.println(bigDecimal1 == bigDecimal2);
- 比较结果
false
- 原因
因为BigDecimal是对象,所以不能用==来判断两个数字的值是否相等。
2. 用 “equals”比较
- 代码示例1
BigDecimal bigDecimal1 = BigDecimal.valueOf(0.00);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.00);
System.out.println(bigDecimal1.equals(bigDecimal2));
- 比较结果
true
- 代码示例2
BigDecimal bigDecimal1 = BigDecimal.valueOf(0);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.0);
System.out.println(bigDecimal1.equals(bigDecimal2));
- 比较结果
false
- 原因
equals方法会比较两部分内容,分别是值(value)和精度(scale),源码如下
3. 用 “compareTo”比较
- 代码示例1
BigDecimal bigDecimal1 = BigDecimal.valueOf(0);
BigDecimal bigDecimal2 = BigDecimal.valueOf(0.0);
System.out.println(bigDecimal1.compareTo(bigDecimal2));
- 比较结果
0
- 原因
BigDecimal中提供了compareTo方法,这个方法就可以只比较两个数字的值,如果两个数相等,则返回0,源码如下。
总结
BigDecimal是一个非常好用的表示高精度数字的类,其中提供了很多丰富的方法。但是,他的equals方法使用的时候需要谨慎,因为他在比较的时候,不仅比较两个数字的值,还会比较他们的精度,只要这两个因素有一个是不相等的,那么结果也是false、如果读者想要对两个BigDecimal的数值进行比较的话,可以使用compareTo方法。