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