BigDecimal equals() vs compareTo()

2022-08-31 06:39:58

考虑一个简单的测试类:

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

}

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

false
true

问:和 之间有什么区别,在可以确定等于?compareTo()equals()BigDecimalcompareToxy

PS:我看到BigDecimal有一个方法对方法。实际上有什么作用?inflate()equals()inflate()


答案 1

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

compareTo 不同,此方法仅在两个对象的值和比例相等时才认为它们相等(因此,当使用此方法比较时,2.0 不等于 2.00)。BigDecimal

换句话说:检查对象在各个方面是否完全相同。 “仅”比较它们的数值。equals()BigDecimalcompareTo()

至于为什么会这样,这个问题已经在这个SO问题中得到了回答。equals()


答案 2

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

基本上,如有必要,请调用,即它创建存储为 from 的未缩放值。如果您不需要它并且未缩放的值适合似乎尝试尽可能长时间地节省空间。inflate()BigInteger.valueOf(intCompact)BigIntegerlong intCompactBigIntegerlongBigDecimal


推荐