代码之家  ›  专栏  ›  技术社区  ›  Curds

Java-正负零的比较

  •  9
  • Curds  · 技术社区  · 9 年前

    为什么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 回复  |  直到 9 年前
        1
  •  12
  •   Tunaki user5979544    9 年前

    这种行为是 actually documented :

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

        2
  •  2
  •   sibnick    9 年前

    Java语言规范: Numerical Comparison Operators <, <=, >, and >=

    正零和负零被视为相等。

    Double.valueOf(+0.0)和Double.valueOf(-0.0)具有不同的位表示。双重的equals比较位表示。

    也可以使用 Double.compare