Float.isNaN()可以理解为一个判断传入的float类型的值是否是非数字的值(NAN),NAN 是Not a Number的缩写。
是数字的话返回flase,不是数字则返回ture
public static void main(String[] args) {
boolean a = Float.isNaN(0.75f);
boolean b = Float.isNaN(0.0f/0.0f);
System.out.println(a);
System.out.println(b);
}
这里0.0f/0.0f返回ture的原因是0.0f/0.0f = NAN ,还有像负数的平方根也是NAN。
System.out.println(0.0f);
System.out.println(0.0f/0.0f);
System.out.println(Math.sqrt(-1));
源代码:
从源代码来分析 return(v!=v) :
由于传进来的v类型是float,类型上面不需要考虑,但是由于0.0f/0.0f是会运算的,结果是NAN,而NAN!=NAN 这个条件是成立的,即返回ture。
至于为什么返回true就可以参考java语言规范。
Java语言规范(Java Language Specification)4.2.3小节中提及的NAN
翻译过来就是:
不等式运算符 != 如果任一操作数为NaN(§15.21.1),则返回true。
尤其是 当且仅当x=NaN时,x!=x 是返回true。
附上官网文档链接:orcale官网的java语言规范文档