|
| |
精品推荐 |
 |
|
| |
|
|
|
|
达内金牌讲师唐亮Java语言细节(中)
|
日期:2007年12月27日 作者: 查看:[大字体
中字体 小字体]
|
System.out.println(stu1==stu2);i,:r4 System.out.println(stu1==stu3);)dg_ }eZA }© 6,2.0-1.1==0.9吗?Vz&]G0 考察下面的代码:3z"I double a=2.0,b=1.1,c=0.9;a if(a-b==c){$s System.out.println("YES!");i8 }else{)i System.out.println("NO!");`cQI }©达内IT技术论坛—中国人学Java、学C++、学C#/.Net、学软件、学IT的地方 -- 达内科技论坛 S 以上代码输出的结果是多少呢?你认为是“YES!”吗?那么,很遗憾的告诉你,不对,Java语言再一次cheat了你,以上代码会输出“NO!”。为什么会这样呢?其实这是由实型数据的存储方式决定的。我们知道实型数据在内存空间中是近似存储的,所以2.0-1.1的结果不是0.9,而是0.88888888889。所以在做实型数据是否相等的判断时要非常的谨慎。一般来说,我们不建议在代码中直接判断两个实型数据是否相等,如果一定要比较是否相等的话我们也采用以下方式来判断:Sb_ if(Math.abs(a-b)<1e-5){{h$?z //相等?yh< }else{/Z //不相等1]]z- }kx`jG 上面的代码判断a与b之差的绝对值是否小于一个足够小的数字,如果是,则认为a与b相等,否则,不相等。 7,判断奇数 以下的方法判断某个整数是否是奇数,考察是否正确:'L#a public boolean isOdd(int n){VJ1* return (n%2==1);Q6Dz }n 很多人认为上面的代码没问题,但实际上这段代码隐藏着一个非常大的BUG,当n的值是正整数时,以上的代码能够得到正确结果,但当n的值是负整数时,以上方法不能做出正确判断。例如,当n=-3时,以上方法返回false。因为根据Java语言规范的定义,Java语言里的求余运算符(%)得到的结果与运算符左边的值符号相同,所以,-3%2的结果是-1,而不是1。那么上面的方法正确的写法应该是:_ public boolean isOdd(int n){Y$;*\c return (n%2!=0);h5 }x (出处:清风网络学院)
上一篇:asp.net动态设置WebService引用
下一篇:达内金牌讲师唐亮Java语言细节(下)
|
| 相关文章: |
|
|
|
| 相关软件: |
|
|
|
|