如何快速記住BigDecimal中compareTo的一、-一、0的含義

BigDecimal中的compare方法返回的值爲多少表示大,多少返回小 常常搞混,今天經過源碼記錄一下java

源碼分爲2個部分,一個是有小數點的,一個是沒有小數點的,下面經過分析沒有小數點的部分來分析。ui

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)
                //若是相等則返回0,若是第一個值比第二個值大則返回1,不然返回-1
                return xs != ys ? ((xs > ys) ? 1 : -1) : 0;
        }
        //存在小數點部分判斷
        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;
    }

咱們經過 1:-1,這個三目表達式,得出結論,第一個數比第二個大就返回1,不然返回-1(第一個數比第二個數小)this

相關文章
相關標籤/搜索