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 

问题: BigDecimalcompareTo 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()); 
  • 确保元素唯一性的队列?
  • 如何比较数组列表与现代Java的平等?
  • 在Eclipse中删除一行
  • 在Android上使用蓝牙的服务发现失败例外
  • 我可以将jar添加到maven 2生成类path而不安装它们?
  • 以编程方式获取当前页面
  • Java:java.util.Preferences失败
  • CDI和EJB如何比较? 相互作用?
  • log4j不打印堆栈跟踪的例外
  • java.lang.NoClassDefFoundError:org / springframework / core / env / ConfigurableEnvironment
  • 你用花括号来做额外的范围吗?