Java - 正负零的比较

时间:2015-08-14 12:47:38

标签: java floating-point comparison-operators

为什么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

我非常不喜欢这样一个事实:你如何比较这两个值会影响结果,我喜欢解释。

2 个答案:

答案 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