【发布时间】:2017-05-07 04:29:32
【问题描述】:
我有两个变量 y 和 z 类型为 double 和 long 。我的问题是相等运算符为它们返回 true,即使它们具有不相等的值,正如您在下面的代码 sn-p 中看到的那样。
public class Test {
public static void main(String[] args) throws Exception {
double y = (double) Long.MAX_VALUE;
System.out.println(y);//9.223372036854776E18
long z = Long.MAX_VALUE - 1;
System.out.println(z);//9223372036854775806
System.out.println(y == z);//=============true
}
}
我的问题是如果 z 比 y 少一个值,为什么 y==z 会实现。
谁能解释一下这种行为。
【问题讨论】:
-
尝试打印这些值?
-
是的,它们都是不同的
-
任何大于
2^53 - 1的 long 值都不能精确地表示为 double。 -
尝试打印
(double) z和y。 -
我很确定这里的某个地方也潜伏着一个副本:-)