【发布时间】:2012-02-07 20:04:32
【问题描述】:
我只是在研究 OCPJP 问题,发现了这个奇怪的代码:
public static void main(String a[]) {
System.out.println(Double.NaN==Double.NaN);
System.out.println(Double.NaN!=Double.NaN);
}
当我运行代码时,我得到了:
false
true
当我们比较两个看起来相同的东西时,false 的输出如何? NaN 是什么意思?
【问题讨论】:
-
这真的很奇怪。因为 Double.NaN 是静态 final,所以与 == 的比较应该返回 true。为问题 +1。
-
python中也是这样:
In [1]: NaN==NaN Out[1]: False -
正确遵循 IEEE 754 标准的所有语言都是如此。
-
直觉:“Hello”不是数字,true(布尔)也不是数字。 NaN != NaN 出于同样的原因 "Hello" != true
-
@Stephan:如果
Double.NaN的类型为java.lang.Double,则与Double.NaN==Double.NaN的比较确实应该返回true。但是,它的类型是原语double,并且适用于double的运算符规则(要求这种不等式以符合 IEEE 754,如答案中所述)。
标签: java floating-point nan scjp ocpjp