先想一下,创建BigDecimal对象的时候一般是怎么创建的?
- new一个,传进去值
- BigDecimal.valueOf方法,传进去值
作为一个数字类型,经常有的操作是比较大小,有一种情况是比较是否相等。用equal方法还是compareTo方法?这里就是一个大坑
1 //new 传进去一个double 2 BigDecimal newZero = new BigDecimal(0.0); 3 System.out.println(BigDecimal.ZERO.equals(newZero)); 4 5 //new 传进去一个字符串 6 BigDecimal stringNewZero = new BigDecimal("0.0"); 7 System.out.println(BigDecimal.ZERO.equals(stringNewZero)); 8 9 //valueOf 传进去一个double10 BigDecimal noScaleZero = BigDecimal.valueOf(0.0); 11 System.out.println(BigDecimal.ZERO.equals(noScaleZero)); 12 13 //valueOf 传进去一个double,再手动设置精度为114 BigDecimal scaleZero = BigDecimal.valueOf(0.0).setScale(1); 15 System.out.println(BigDecimal.ZERO.equals(scaleZero));
用于比较的值全都是0,猜一猜上面几个equals方法返回的结果是什么?全都是true?no no no...
truefalsefalsefalse
惊不惊喜,意不意外?原因是什么呢?看一下BigDecimal的equals方法的实现:
1 public boolean equals(Object x) { 2 //类型不同,直接返回false 3 if (!(x instanceof BigDecimal)) 4 return false; 5 BigDecimal xDec = (BigDecimal) x; 6 //同一个对象,直接返回true 7 if (x == this)

