BigDecimal equals()与compareTo()
考虑简单的testing类:
import java.math.BigDecimal; /** * @author The Elite Gentleman * */ public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub BigDecimal x = new BigDecimal("1"); BigDecimal y = new BigDecimal("1.00"); System.out.println(x.equals(y)); System.out.println(x.compareTo(y) == 0 ? "true": "false"); } }
你可以(有意识地)说x等于y (不是对象引用),但是当你运行这个程序时,下面的结果显示:
false true
问题: BigDecimal中compareTo compareTo()和equals()之间的区别compareTo可以确定x等于y吗?
PS:我看到BigDecimal在equals()方法上有一个inflate() equals()方法。 inflate()实际上做了什么?
答案在equals()方法的JavaDoc中 :
与
compareTo不同的是,这个方法只有在两个BigDecimal对象的值和比例相等的情况下才会相等(因为这个方法比较2.0不等于2.00)。
换句话说: equals()检查BigDecimal对象在每个方面是否完全相同 。 compareTo() “only”比较它们的数值。
我看到BigDecimal在equals()方法上有一个inflate()方法。 inflate()实际上做了什么?
基本上,如果需要的话, inflate()调用BigInteger.valueOf(intCompact) ,也就是说,它创build一个非常量化的值,它以long intCompactforms存储为BigInteger 。 如果你不需要这个BigInteger并且这个未缩放的值适合一个long BigDecimal似乎尽可能地节省空间。
你也可以比较双倍的价值
BigDecimal a= new BigDecimal("1.1"); BigDecimal b =new BigDecimal("1.1"); System.out.println(a.doubleValue()==b.doubleValue());