| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 676 人关注过本帖
标题:(分享)学习Java应注意的一些细节(四)
只看楼主 加入收藏
dadongzicool
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:209
专家分:474
注 册:2009-3-20
结帖率:100%
收藏
 问题点数:0 回复次数:1 
(分享)学习Java应注意的一些细节(四)
2.0-1.1==0.9吗?
考察下面的代码:
 double a=2.0,b=1.1,c=0.9;
 if(a-b==c)
    { System.out.println("YES!"); }
 else
    { System.out.println("NO!"); }
以上代码输出的结果是多少呢?你认为是“YES!”吗?那么,很遗憾的告诉你,不对,Java语言再一次cheat了你,以上代码会输出“NO!”。为什么会这样呢?其实这是由实型数据的存储方式决定的。我们知道实型数据在内存空间中是近似存储的,所以2.0-1.1的结果不是0.9,而是0.88888888889。所以在做实型数据是否相等的判断时要非常的谨慎。一般来说,我们不建议在代码中直接判断两个实型数据是否相等,如果一定要比较是否相等的话我们也采用以下方式来判断: if(Math.abs(a-b)<1e-5){ //相等 }else{ //不相等 } 上面的代码判断a与b之差的绝对值是否小于一个足够小的数字,如果是,则认为a与b相等,否则,不相等。

判断奇数 以下的方法判断某个整数是否是奇数,考察是否正确:
public boolean isOdd(int n)
      { return (n%2==1); }
很多人认为上面的代码没问题,但实际上这段代码隐藏着一个非常大的BUG,当n的值是正整数时,以上的代码能够得到正确结果,但当n的值是负整数时,以上方法不能做出正确判断。例如,当n=-3时,以上方法返回false。因为根据Java语言规范的定义,Java语言里的求余运算符(%)得到的结果与运算符左边的值符号相同,所以,-3%2的结果是-1,而不是1。那么上面的方法正确的写法应该是: public boolean isOdd(int n){ return (n%2!=0); }  
搜索更多相关主题的帖子: 学习 分享 细节 Java 
2009-10-17 23:07
疯狂小子
Rank: 1
等 级:新手上路
帖 子:51
专家分:2
注 册:2009-6-8
收藏
得分:0 
顶下  谢谢
2010-02-20 17:58
快速回复:(分享)学习Java应注意的一些细节(四)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016290 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved