java:d ouble ==和Double equals

问题描述 投票:0回答:1

我对使用double的一些事感到困惑。

  1. 如果我用相同的文字初始化2个双打,那么==总是评估为真?例如,如果以下输出为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。

所以问题是,对于double,“==”和Double的“equals()”保证对于使用相同文字初始化的2个变量求值为true?

他们何时会评价为假?这是算术操作涉及的时候吗?

谢谢

java double
1个回答
1
投票

一般来说,==是一个检查相等性的运算符。对象变量是引用,因此它检查引用或地址相等性。在原始数据类型的情况下,表示内存中的值也意味着它检查值相等。

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

双倍和双倍也是如此。双打引起的问题是由舍入误差引起的值的不匹配。

某些算术运算可能会以不同的方式处理舍入,因此即使您认为它应该相等,也可以获得false的值相等。

应该指出,即使舍入规则有点不一致,算术运算也是确定性的,因此可以处理不一致性。

© www.soinside.com 2019 - 2024. All rights reserved.