为什么这个比较会返回错误?

Avi*_*air 0 java

可能重复:
为什么Double.NaN == Double.NaN返回false?

这纯粹是出于好奇.

我做了这样的事情:

public static void main(String args[]) throws Exception {
        System.out.println(Double.NaN==Double.NaN);
    }
Run Code Online (Sandbox Code Playgroud)

输出是false.这不应该回归true

为什么会这样?

Rof*_*ion 5

Java语言规范:

浮点运算符不会产生例外(第11节).溢出的操作产生有符号的无穷大,下溢的操作产生非规范化值或带符号的零,并且没有数学定义结果的操作产生NaN.以NaN作为操作数的所有数值运算都会产生NaN.如已经描述的那样,NaN是无序的,因此涉及一个或两个NaN的数字比较操作返回false,并且涉及NaN的任何!=比较返回true,包括当x是NaN时x!= x.

这里重要的一句是:

所以涉及一个或两个NaN的数字比较操作返回false