我对使用double的一些事感到困惑。
double a = .1d;
double b = .1d;
System.out.println(a==b);
Double a = .1d;
Double b = .1d;
System.out.println(a.equals(b));
根据Double文档,如果doubleValue()相等,则equals()返回true。
所以问题是,对于double,“==”和Double的“equals()”保证对于使用相同文字初始化的2个变量求值为true?
他们何时会评价为假?这是算术操作涉及的时候吗?
谢谢
一般来说,==
是一个检查相等性的运算符。对象变量是引用,因此它检查引用或地址相等性。在原始数据类型的情况下,表示内存中的值也意味着它检查值相等。
方法equals(~)
检查值或内容相等。您不要将它用于原始数据类型,而是用于对象。
双倍和双倍也是如此。双打引起的问题是由舍入误差引起的值的不匹配。
某些算术运算可能会以不同的方式处理舍入,因此即使您认为它应该相等,也可以获得false
的值相等。
应该指出,即使舍入规则有点不一致,算术运算也是确定性的,因此可以处理不一致性。