Java中为何两个NaN使用>=比较返回true?与JLS规定不符
问题解答:为什么
f>=h返回true? 你代码里的3/0.0d和2/0.0d根本不是NaN,而是正无穷大(Positive Infinity),这就是和你预期不符的核心原因。
- 在Java中,正数除以
0.0的结果是Double.POSITIVE_INFINITY,只有像0.0/0.0d、Math.sqrt(-1)、Double.POSITIVE_INFINITY - Double.POSITIVE_INFINITY这类运算才会产生NaN。 - 当两个正无穷大的值用
>=比较时,结果为true——因为正无穷大等于正无穷大,自然满足“大于等于”的条件。 - 如果你想验证JLS关于NaN的规则,把代码改成这样试试:
double f = 0.0/0.0d; double h = 0.0/0.0d; System.out.println((f>=h)); // 此时会输出false
内容的提问来源于stack exchange,提问作者Aryan Singh
相关产品推荐
相关产品推荐

