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 intCompact
forms存储为BigInteger
。 如果你不需要这个BigInteger
并且这个未缩放的值适合一个long
BigDecimal
似乎尽可能地节省空间。
你也可以比较双倍的价值
BigDecimal a= new BigDecimal("1.1"); BigDecimal b =new BigDecimal("1.1"); System.out.println(a.doubleValue()==b.doubleValue());