Java中等于零(BigDecimal / Double)的运算符

一些有趣的发现wrt等于0和0.0上的运算符

  1. new Double(0.0).equals(0)返回false,而new Double(0.0).equals(0.0)返回true。

  2. BigDecimal.ZERO.equals(BigDecimal.valueOf(0.0))返回false,而BigDecimal.ZERO.equals(BigDecimal.valueOf(0))返回true。

看起来在两种情况下都完成了字符串比较。谁能对此有所启发。

谢谢。

回答:

BigDecimal“等于”比较值和小数位数。如果只想比较值(0 == 0.0),则应使用compareTo:

BigDecimal.ZERO.compareTo(BigDecimal.valueOf(0.0)) == 0 //true

BigDecimal.ZERO.compareTo(BigDecimal.valueOf(0)) == 0 //true

参见javadoc。

至于Double比较,如其他答案所述,您正在将Double与Integer进行比较new

Double(0.0).equals(0),这false是因为对象具有不同的类型而返回。作为参考,JDK

7中equals方法的代码为:

public boolean equals(Object obj) {

return (obj instanceof Double)

&& (doubleToLongBits(((Double)obj).value) ==

doubleToLongBits(value));

}

就您而言,(obj instanceof Double)是错误的。

以上是 Java中等于零(BigDecimal / Double)的运算符 的全部内容, 来源链接: utcz.com/qa/434193.html

回到顶部