Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java System.out.println(0.0%0.0!=0.0/0.0);会有什么结果?你能解释一下答案吗?_Java - Fatal编程技术网

Java System.out.println(0.0%0.0!=0.0/0.0);会有什么结果?你能解释一下答案吗?

Java System.out.println(0.0%0.0!=0.0/0.0);会有什么结果?你能解释一下答案吗?,java,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 f

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

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是无序的,因此进行数值比较 涉及一个或两个NAN的操作返回false和any= 涉及NaN的比较返回true,包括x=当x为NaN时为

更多信息:


它们在我看来根本不一样。或者更确切地说,它们看起来就像
3/4
3**4
一样,为什么你认为这个等式应该是真的呢?有趣的是,字节码是:0:getstatic#16//字段java/lang/System.out:Ljava/io/PrintStream;3:iconst#u 14:invokevirtual#22//方法java/io/PrintStream.println:(Z)v7:getstatic#16//字段java/lang/System.out:Ljava/io/PrintStream;10:iconst_0 11:invokevirtual#22//方法java/io/PrintStream.println:(Z)v14:return。。。我不明白为什么
0
1
被加载到堆栈中。