黑马程序员技术交流社区
标题:
你们都还记得这段代码不
[打印本页]
作者:
孟浩然
时间:
2012-6-5 14:02
标题:
你们都还记得这段代码不
class NewDemo_06{
public static void main(String args[]){
// ①
double i=0.0/0.0;
if(i==i){
System.out.println("i==i");
}
else{System.out.println("i!=i");
}
//②
double j=2.0/0.0;
if(j==j){
System.out.println("j==j");
}
else{System.out.println("j!=j");
}
}
}
复制代码
作者:
金鑫
时间:
2012-6-5 14:07
最终的结果是:
i!=i
j==j
WHY?疑惑中
作者:
孟浩然
时间:
2012-6-5 14:17
金鑫 发表于 2012-6-5 14:07
最终的结果是:
i!=i
j==j
其实在第一步里i就不是个数字的量,可以查一下Double.NaN,这个是针对浮点型数据的,只要是没有定义好的浮点型数据都会得到这个值,所以i!=i,至于什么是没有定义好,还要自己试吧。
作者:
郭宁
时间:
2012-6-5 14:22
j=2.0/0.0 = 无穷大 (无穷大也是个数字,自然可以比较)
i=0.0/0.0 = NaN = Not a Number (不是个数字了,你还杂比较)
作者:
孙峰
时间:
2012-6-5 14:30
我百了好久啊,对于第一个:为什么会这样呢?关键在0.0/0.0这个值,在IEEE 754浮点算术规则里保留了一个特殊的值用来表示一个不是数字的数量。这个值就是NaN("Not a Number"的缩写),对于所有没有良好定义的浮点计算都将得到这个值,比如:0.0/0.0;其实我们还可以直接使用Double.NaN来得到这个值。在IEEE 754规范里面规定NaN不等于任何值,
包括它自己
。所以就有了i!=i的代码。
第二个,没百着,应该这时候是个数值而且相等吧。
作者:
李春阳
时间:
2012-6-5 16:22
最怕这样看似简单滴- - 暗藏杀机
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2