判斷金額爲0狀況下,不處理業務;json
業務數據是一個快照(json格式存儲),其中有一個金額爲0.00,轉換爲對象中的某個屬性(BigDecimal類型) 後 用ide
BigDecimal.ZERO.equals(amount)
判斷 出問題,二者不等。this
先看BigDecimal equals 源碼:spa
@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()); }
首先根據地址,而後根據精度判斷。debug
再來看看下面幾個判斷:對象
debug 狀態下比較:ci
用b.compareTo(BigDecimal.ZERO)==0,能夠比較是否等於0源碼
compareTo方法:bug
對於BigDecimal的大小比較,用equals方法的話會不只會比較值的大小,還會比較兩個對象的精確度,而compareTo方法則不會比較精確度,只比較數值的大小方法