【发布时间】:2012-08-26 22:41:09
【问题描述】:
我知道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.equals(d)而不是==。==只检查引用。 -
@Baz 啊,我明白了。双倍是一类。它将比较对象而不是比较值。当我们使用
String时,这个问题很喜欢。应该使用equals而不是==:) -
另一个区别是 Double 允许 null 值,但 double 不允许。