我有两个变量y和z,类型为double
和long
。我的问题是相等运算符对它们返回true,即使它们具有不同的值,如下面的代码片段中所示。平等运算符对不等值返回true
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一个值,为什么ÿ== z为即将实现。
有人可以解释这种行为。
尝试打印这些价值观? – GhostCat
是的,它们都不相同 –
任何大于'2^53 - 1'的长整数值都不能完全表示为双精度值。 –