Java - 正负零的比较

Cur*_*rds 6 java floating-point comparison-operators

为什么Java在比较-0.0和+0.0时不一致?将数字与-0/+ 0进行比较的Java标准方法是什么?

我遇到过这个特别的bugaboo:

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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它打印以下内容:

== --> same
equals --> different
Run Code Online (Sandbox Code Playgroud)

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

Tun*_*aki 11

实际记录了此行为:

如果d1表示+0.0而d2表示-0.0,反之亦然,则等值测试的值为false,即使+0.0 == - 0.0的值为true.此定义允许哈希表正常运行.