BigDecimal 'equals' сравнивает значение и масштаб. Если вы хотите сравнить только значения (0 == 0,0), вам следует использовать compareTo:
BigDecimal.ZERO.compareTo(BigDecimal.valueOf(0.0)) == 0 //true
BigDecimal.ZERO.compareTo(BigDecimal.valueOf(0)) == 0 //true
См. Javadoc .
Что касается сравнения Double, как объясняется другими ответами, вы сравниваете Double с целым числом в new Double(0.0).equals(0)
, которое возвращает false
, потому что объекты имеют разные типы. Для справки, код для метода равных в JDK 7 :
public boolean equals(Object obj) {
return (obj instanceof Double)
&& (doubleToLongBits(((Double)obj).value) ==
doubleToLongBits(value));
}
В вашем случае (obj instanceof Double)
неверно.