Java中等于零(BigDecimal / Double)的运算符
一些有趣的发现wrt等于0和0.0上的运算符
new Double(0.0).equals(0)
返回false,而new Double(0.0).equals(0.0)
返回true。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 //trueBigDecimal.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