A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孟浩然 中级黑马   /  2012-6-5 14:02  /  1338 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class NewDemo_06{
  2.        
  3.         public static void main(String args[]){
  4.                
  5.                
  6.         // ①       
  7.     double i=0.0/0.0;
  8.        
  9.         if(i==i){
  10.                
  11.                         System.out.println("i==i");
  12.         }
  13.        
  14.                 else{System.out.println("i!=i");
  15.         }
  16.        
  17.         //②
  18.         double j=2.0/0.0;
  19.        
  20.         if(j==j){
  21.                
  22.                         System.out.println("j==j");
  23.         }
  24.        
  25.                 else{System.out.println("j!=j");
  26.         }       
  27.         }
  28. }
复制代码

5 个回复

倒序浏览
最终的结果是:
i!=i
j==j

WHY?疑惑中
回复 使用道具 举报
金鑫 发表于 2012-6-5 14:07
最终的结果是:
i!=i
j==j

其实在第一步里i就不是个数字的量,可以查一下Double.NaN,这个是针对浮点型数据的,只要是没有定义好的浮点型数据都会得到这个值,所以i!=i,至于什么是没有定义好,还要自己试吧。
回复 使用道具 举报
j=2.0/0.0 = 无穷大 (无穷大也是个数字,自然可以比较)
i=0.0/0.0 = NaN = Not a Number (不是个数字了,你还杂比较)
回复 使用道具 举报
我百了好久啊,对于第一个:为什么会这样呢?关键在0.0/0.0这个值,在IEEE 754浮点算术规则里保留了一个特殊的值用来表示一个不是数字的数量。这个值就是NaN("Not a Number"的缩写),对于所有没有良好定义的浮点计算都将得到这个值,比如:0.0/0.0;其实我们还可以直接使用Double.NaN来得到这个值。在IEEE 754规范里面规定NaN不等于任何值,包括它自己。所以就有了i!=i的代码。
第二个,没百着,应该这时候是个数值而且相等吧。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
最怕这样看似简单滴- - 暗藏杀机
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马