关于Bigdecimal 的equals 和compare

关于Bigdecimal 的equals 和compare

在比较两个Bigdecimal 的值是否相等时,我们有equals 和compare两个选择,那么这两种方式有什么不同吗?

接下来看一下源码。

 @Override
    public boolean equals(Object x) {
        if (!(x instanceof BigDecimal))
            return false;
        BigDecimal xDec = (BigDecimal) x;
        if (x == this)
            return true;
        if (scale != xDec.scale)
            return false;
        long s = this.intCompact;
        long xs = xDec.intCompact;
        if (s != INFLATED) {
            if (xs == INFLATED)
                xs = compactValFor(xDec.intVal);
            return xs == s;
        } else if (xs != INFLATED)
            return xs == compactValFor(this.intVal);

        return this.inflated().equals(xDec.inflated());
    }

equals方法不仅比较值大小,而且会比较对象精度。

 public int compareTo(BigDecimal val) {
        // Quick path for equal scale and non-inflated case.
        if (scale == val.scale) {
            long xs = intCompact;
            long ys = val.intCompact;
            if (xs != INFLATED && ys != INFLATED)
                return xs != ys ? ((xs > ys) ? 1 : -1) : 0;
        }
        //方法signum返回数据的正负号 -1 负数 0 就是0 1就是正数
        int xsign = this.signum();
        int ysign = val.signum();
        if (xsign != ysign)
            return (xsign > ysign) ? 1 : -1;
        if (xsign == 0)
            return 0;
        int cmp = compareMagnitude(val);
        return (xsign > 0) ? cmp : -cmp;
    }

而compare只比较值大小。


版权声明:本文为qq_43475336原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。