遇到这个问题,最开始是在HashMap的源码中,在构造方法中调用了该方法
而isNaN()是Float类和Double类都有的一个静态方法,意思是判断输入的参数是否是一个NaN值。
方法体就只有一条语句,即v!=v。
其实NaN严格来说不算是一个值,NaN全称是Not a Number,意思是“不是一个数字”,代表一种不合法,即float值和double值不合法。
而NaN在Float类和Double类中有定义。
我们知道除法的分母是不能为0的,这就是一种不合法。
Math.sqrt(-1)返回的就是一个NaN(Not a Number)。
总结:NaN就是用来指定数的不合法状态,而isNaN()就是判断输入的数是否是不合法的,不合法则返回true,合法返回false,而如果数是NaN,那么每次在内存中的地址都不一样,一定会返回true的。
可以参考百度百科