从源码的角度分析 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。

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语言规范文档

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值