对于此代码:
double foo = 100.0;
...
// foo may or may not change value here
...
if (foo == 100) { // will this ever be true?
....
}
是否会调用if块?如果没有,检查foo == 100.0
是否正确的方法是什么?
答案 0 :(得分:2)
试一试,交配......
public class Test
{
public static void main(String[] args)
{
double foo = 100.0;
if (foo == 100)
{
System.out.println("true");
}
}
}
输出:
true
答案 1 :(得分:1)
是的,可以调用它。测试可以是true
。如果单独foo
(或重新分配给100.0
),则比较将成功。
但它只会成功,因为100.0
的完全表示为double
,而int
值100
将转换为通过扩展原语转换获得相同的100.0
double
值。
谨慎使用==
来比较double
值是正确的,因为某些double
值是精确文字的不精确表示(例如0.1
被不恰当地表示为double
)。
比较double
值的最佳方法是确保值在彼此的某个(低)容差范围内as JUnit does:
assertEquals(双重预期,双重实际,双重增量)
这可确保expected
和actual
值在公差值delta
内。