从源码的角度分析 Java 中的 Float.isNaN()

 

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。

从源码的角度分析 Java 中的 Float.isNaN()_第1张图片

源代码:

从源码的角度分析 Java 中的 Float.isNaN()_第2张图片

从源码的角度分析 Java 中的 Float.isNaN()_第3张图片

从源代码来分析 return(v!=v) :

  由于传进来的v类型是float,类型上面不需要考虑,但是由于0.0f/0.0f是会运算的,结果是NAN,而NAN!=NAN 这个条件是成立的,即返回ture。

 

参考资料:Java语言规范(Java Language Specification)中提及的NAN

Basically, NaN represents an undefined value. The value of 0.0 / 0.0 is NaN, and Nan != NaN. It may seem logical because Math.sqrt(-1) also gives you NaN.

翻译过来就是:

NaN表示未定义的值。0.0/0.0的值是NaN,而NaN!=NAN,这似乎合乎逻辑。因为数学中sqrt(-1)也是返回给你NAN。

 

 


 

你可能感兴趣的:(java)