的System.out.println(0.0%0.0 = 0.0 / 0.0!);什么会出局?你能解释一下答案吗?

时间:2014-10-17 05:58:55

标签: java

我正在研究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是什么意思?

1 个答案:

答案 0 :(得分:3)

0.0 / 0.00.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是无序的,所以进行数值比较   涉及一个或两个NaN的操作返回false和任何!=   涉及NaN的比较返回true,包括x!= x,当x是NaN时。

更多信息: