Double.isNaN()是Java中唯一可靠判断double值是否为NaN的方法;因IEEE 754规定NaN不等于任何值(含自身),故==和!=均失效,且该方法对正常数值、±Infinity均返回false。

Double.isNaN() 是 Java 中专门用来判断一个 double 值是否为 NaN(Not-a-Number)的静态方法,它比用 == 或 != 比较更安全、更准确。
为什么不能用 == 判断 NaN
根据 IEEE 754 标准,NaN 不等于任何值——包括它自己。所以:
-
Double.NaN == Double.NaN返回 false -
Double.NaN != Double.NaN返回 true(但这不是可靠判断方式)
直接用 == 或 != 无法正确识别 NaN,容易导致逻辑错误。
Double.isNaN() 的正确用法
该方法接收一个 double 类型参数,返回 boolean:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
立即学习“Java免费学习笔记(深入)”;
- 参数是
NaN→ 返回 true - 参数是普通数字(含
±Infinity)→ 返回 false
示例:
double a = 0.0 / 0.0; // 得到 NaN double b = Double.NaN; double c = Double.POSITIVE_INFINITY; System.out.println(Double.isNaN(a)); // true System.out.println(Double.isNaN(b)); // true System.out.println(Double.isNaN(c)); // false System.out.println(Double.isNaN(3.14)); // false
注意包装类型 Double 的 isNan() 实例方法
对 Double 包装类对象,也有同名实例方法:someDoubleObject.isNaN(),但需先确保对象非 null,否则会抛 NullPointerException:
- 推荐写法:
obj != null && obj.isNaN() - 或更稳妥:用
Double.isNaN(obj.doubleValue())(自动拆箱,null 会 NPE,仍需判空)
常见产生 NaN 的场景
以下运算结果通常是 NaN,适合用 Double.isNaN() 检查:
0.0 / 0.0Math.sqrt(-1.0)Math.log(-2.0)-
Double.parseDouble("abc")(抛异常,但若捕获后设为 NaN 则需检查) - 任意涉及 NaN 的算术运算,如
NaN + 1.0

















