黑马程序员技术交流社区
标题:
一道 != 的问题!
[打印本页]
作者:
余银桂
时间:
2012-6-21 02:23
标题:
一道 != 的问题!
本帖最后由 余银桂 于 2012-6-21 17:58 编辑
public class Test {
public static void main(String[] args) {
double i=0.0/0.0; //首先为什么这里不会报除0异常?
if(i==i){
System.out.println("Yes i==i");
}else{
System.out.println("No i!=i");
}
}
}
//运行结果居然是 NO i!=i 这又是为什么,在内存中是怎样实现的?
复制代码
作者:
闾丘日月
时间:
2012-6-21 02:56
参见Double类的常量Double.NaN 0.0/0.0会产生一个NaN对象你可以用Double类中的isNaN方法来验证
如果你用1/0.0的话它产生的就是一个POSITIVE_INFINITY 对象,第一个问题就是这样的。为什么这样规定我就不知道 了
至于为什么i==i 返回false的问题,我将你的代码重新改写成了Double i=0.0/0.0; ,这个时候打印的是true.
所以到这里我猜想是因为装箱和拆箱所引起的。所以我换成了1.4做实验,但是很遗憾1.4给的结果也是false。
但是如果是1/0.0,那么打印出来就是true。
实际原因实在不是太清楚,但是我知道使用浮点数会很麻烦,所以能不用就不用。
作者:
孙安庆
时间:
2012-6-21 03:05
1、java提供的一个特殊的浮点数值用来表示出错---非数
0.0除以0.0或者对一个负数开方将得到非数,用过Double的NaN表示
2、NaN不与任何数值相等,甚至和NaN都不相等
i=NaN //0.0除以0.0得到非数
NaN!=NaN //两个非数是不相等的
作者:
孙飞
时间:
2012-6-21 10:28
double i=0.0/0.0;返回的结果是NaN,Not a Number。它是用于处理计算中出现的错误情况,既然不是数字所以就不能用==来判断,所以会返回else
作者:
余银桂
时间:
2012-6-21 17:58
double这玩意真心桑不起,谢谢各位了,以后对double要多加留意了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2