BigDecimal等于()与compareTo()

Buh*_*ndi 141 java equals bigdecimal compareto

考虑简单的测试类:

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");
    }

}
Run Code Online (Sandbox Code Playgroud)

你可以(有意识地)说它x等于y(不是对象引用),但是当你运行程序时,以下结果显示:

false
true
Run Code Online (Sandbox Code Playgroud)

问:什么是之间的区别compareTo(),并equals()BigDecimalcompareTo可以确定x等于y

PS:我看到BigDecimal在inflate()方法上有一个equals()方法.inflate()实际上做了什么?

Joa*_*uer 205

答案是在方法的JavaDoc中equals():

compareTo此不同,此方法只考虑两个BigDecimal对象的值和比例相等(因此,当通过此方法进行比较时,2.0不等于2.00).

换句话说:equals()检查BigDecimal对象在每个方面是否完全相同."only"比较它们的数值.compareTo()

  • 如果您不仔细阅读JavaDoc,那么这是"BigDecimal"中非常棘手的部分.:) - 我们从中获得了一些奇怪的错误,直到我们意识到差异. (22认同)
  • @StephenC ......但是不足以让你告诉我们或提供链接? (14认同)
  • @StephenC我认为这是不正确的*存在这种不一致. (8认同)
  • 滑稽.在阅读了你的答案之后,我刚刚检查了Comparable并且它强烈建议坚持使用equals"强烈建议(但不是必需的)" (7认同)
  • 我问过为什么:http://stackoverflow.com/questions/14102083/why-is-bigdecimal-equals-specified-to-compare-both-value-and-scale-individually (4认同)
  • 当直观的东西不正确时,标准API的许多部分恰好"不直观地"行事.`BigDecimal`就是这样的一件事.因此,应始终检查JavaDoc.*至少*一旦你发现一些奇怪的东西正在发生. (3认同)
  • @ SJuan76 - 重要的是要理解为什么*BigDecimal`存在这种不一致的正确*... (3认同)
  • @MattR - 注意到:-) (2认同)