BigDecimal的值比较实用compareTo,而不使用equals
使用equals比较2个BigDecimal对象值时,会比较值(value)和标度(scale),比如0.1和0.10的值一样,但标度不一样,而compareTo仅比较值
BigDecimal的equals原理
BigDecimal a = new BigDecimal(1)
BigDecimal b = new BigDecimal(1L)
a.equals(b) // true
结论:1和1L均为整数,标度为0
BigDecimal a = new BigDecimal(0.1)
BigDecimal b = new BigDecimal(0.10)
a.equals(b) // true
结论:0.1和0.10均为浮点数,存储的近似值为0.100...625,其标度均为55
BigDecimal a = new BigDecimal("0.1")
BigDecimal b = new BigDecimal("0.10")
a.equals(b) // false
结论:"0.1"和"0.10"均为字符串,存储的值分别为0.1和0.10,标度分别为1和2
所以BigDecimal的值比较使用compareTo
参考资料
Hollis 大神的《2023全新Java面试宝典课程,八股文学习资料》