Double与Double之间的差异比较
我知道这Double
是一个包装类,它包装double
数字。今天,我看到了另一个主要区别:
double a = 1.0;double b = 1.0;
Double c = 1.0;
Double d = 1.0;
System.out.println(a == b); // true
System.out.println(c == d); // false
我真奇怪!
因此,如果Double
每次使用,我们都必须执行以下操作:
private static final double delta = 0.0001;System.out.println(Math.abs(c-d) < delta);
我无法解释为什么Double直接将比较做错了。请为我解释。
回答:
c
而d
在技术上两个不同的对象和==
运营商只比较引用。
c.equals(d)
更好,因为它比较值而不是引用。但是仍然不理想。直接比较浮点值应始终将一些误差(ε)考虑在内(Math.abs(c - d) < epsilon
)。
注意:
Integer c = 1;Integer d = 1;
这里的比较会产生true
,但是比较复杂(Integer
内部缓存,在JavaDoc中有Integer.valueOf()
描述):
此方法将始终缓存-128至127(包括)范围内的值,并且可能缓存该范围之外的其他值。
为什么valueOf()
呢 由于此方法隐式用于实现自动装箱:
Integer c = Integer.valueOf(1);Integer d = Integer.valueOf(1);
以上是 Double与Double之间的差异比较 的全部内容, 来源链接: utcz.com/qa/427318.html