我当时正在研究OCJP的问题,我发现了一个奇怪的代码:
public class abc {
public static void main(String[] args) {
System.out.println(0.0%0.0!=0.0/0.0);// it return true
System.out.println(0.0%0.0==0.0/0.0);// it return false
}
}当我运行密码时,我得到:
true
false当我们比较两个看起来相同的东西时,输出怎么会是假的呢?NaN是什么意思?
发布于 2014-10-17 06:05:03
0.0 / 0.0和0.0 % 0.0都返回Double.NaN。
如果您比较Double.NaN == Double.NaN,您将收到false,这就是System.out.println(0.0%0.0==0.0/0.0);打印false的原因。
现在的问题是为什么Double.NaN == Double.NaN返回false
据JLS称:
浮点运算符不会产生任何例外(第11节)。溢出运算产生有符号无穷大,下溢运算产生非正规化值或符号零,没有数学确定结果的运算产生NaN。因此,所有以NaN作为操作数的数值操作都会产生NaN。如前所述,NaN是无序的,因此,涉及一个或两个NaNs的数值比较操作返回false,any != NaN返回true,包括x为NaN时的x!=x。
更多信息:
https://stackoverflow.com/questions/26418720
复制相似问题