java:d​​ouble ==和Double equals

时间:2019-03-06 06:49:49

标签: java double

我对使用double感到有些困惑。

  1. 如果我要使用相同的字面量初始化2个双打,==总是会得出true吗?例如,如果以下输出为true,但我不知道这是否是偶然的:

    double a = .1d;
    double b = .1d;
    System.out.println(a==b);
    
  2. 使用Double而不是double时,我得到相同的结果:

    Double a = .1d;
    Double b = .1d;
    System.out.println(a.equals(b));
    

根据Double文档,如果doubleValue()相等,则equals()返回true。

所以问题是,对于用相同文字初始化的2个变量,是否保证对double等于“ ==”而对Double等于“ equals()”?

何时将它们评估为假?是涉及算术运算的吗?

谢谢

1 个答案:

答案 0 :(得分:1)

通常==是检查是否相等的运算符。对象变量是引用,因此它检查引用或地址是否相等。对于表示内存中值的原始数据类型,这也意味着它会检查值是否相等。

方法equals(~)检查值或内容是否相等。您不将它用于原始数据类型,而用于对象。

double和Double也是如此。双精度引起的问题是舍入误差引起的值不匹配。

某些算术运算可能会舍入不同的舍入,因此即使您认为应该相等,也可能获得false来实现值相等。

应该指出,即使舍入规则有点不一致,算术运算也是确定的,这样就可以处理不一致的情况。