[英]java: double == and Double equals
我对使用double感到有些困惑。
如果我要使用相同的字面量初始化2个双打,==总是会评估为true? 例如,如果以下输出为真,但我不知道这是否是偶然的:
double a = .1d; double b = .1d; System.out.println(a==b);
当使用Double而不是double时,我得到相同的结果:
Double a = .1d; Double b = .1d; System.out.println(a.equals(b));
根据Double文档,如果doubleValue()相等,则equals()返回true。
因此,问题是,对于使用相同文字初始化的2个变量,是否保证对Double等于“ ==“,对Double等于” equals()”?
他们什么时候会得出错误的结论? 当涉及算术运算时,这是吗?
谢谢
通常, ==
是用于检查相等性的运算符。 对象变量是引用,因此它检查引用或地址是否相等。 对于表示内存中值的原始数据类型,这也意味着它检查值的相等性。
equals(~)
方法检查值或内容是否相等。 您不将其用于原始数据类型,而是用于对象。
double和Double也是如此。 由双精度引起的问题是由舍入误差引起的值的不匹配。
一些算术运算可能会以不同的方式处理舍入,因此即使您认为值相等,对于值相等也可能会false
。
应该指出,即使舍入规则有点不一致,算术运算也是确定的,这样就可以处理不一致的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.