今天群里面有人问了个问题:举个例子说明a!=a的情况,想了半天没想出来。原来答案是这样的:
double a=0.0/0.0;
此时System.out.println(a!=a);即是正确的;
为什么是正确的,为什么没有报错呢(如果是int a=0/0运行时肯定报错了:Exception in thread "main" java.lang.ArithmeticException: / by zero),而double和float却显示的是正确。下面做下解释:
0.0/0.0这个值,在IEEE 754浮点算术规则里保留了一个特殊的值用来表示一个不是数字的数量。这个值就是NaN("Not a Number"的缩写),对于所有没有良好定义的浮点计算都将得到这个值,比如:0.0/0.0;其实我们还可以直接使用Double.NaN来得到这个值。在IEEE 754规范里面规定NaN不等于任何值,包括它自己。