为什么Java在比较-0.0和+0.0时不一致?什么是比较数字以考虑-0 / + 0的Java标准方法?
我遇到过这个特别的问题:
public class ZeroCompare {
public static void main(String[] args) {
if ( 0.0 == -0.0 ) {
System.out.println("== --> same");
} else {
System.out.println("== --> different");
}
if ( new Double(0.0).equals( -0.0 ) ) {
System.out.println("equals --> same");
} else {
System.out.println("equals --> different");
}
}
}
它打印以下内容:
== --> same
equals --> different
我非常不喜欢这样一个事实:你如何比较这两个值会影响结果,我喜欢解释。
答案 0 :(得分:11)
此行为为actually documented:
如果d1表示+0.0而d2表示-0.0,反之亦然,则等于测试的值为false,即使+0.0 == - 0.0的值为true。此定义允许哈希表正常运行。
答案 1 :(得分:2)
Java语言规范:Numerical Comparison Operators <, <=, >, and >=
正零和负零被认为是相等的。
Double.valueOf(+0.0)和Double.valueOf(-0.0)具有不同的位表示。 Double.equals比较位表示。
您也可以使用Double.compare