A few interesting observations w.r.t equals operator on 0 and 0.0
new Double(0.0).equals(0) returns false, while new Double(0.0).equals(0
new Double(0.0).equals(0)
new Double(0.0).equals(0
For performance considerations BigDecimal, BigInteger caches small values 0 to 15 in case of BigDecimal (without fractions)
BigDecimal.ZERO will be new BigDecimal(BigInteger.ZERO, 0, 0, 1) & valueOf method typically picks up from cache for 0 to 15 :)