java表达式之谜
1. -3不是奇数吗?
2. (2.00 -1.10)不等于0.9??
3. long a= 24*60*60*1000*1000;
long b=24*60*60*1000;
a/b不等于1000???
4. System.out.print(12345+5432l). 输出17777????
测试代码及结果:
解惑:
1. 因为-3%2结果为-1而不等于1 ,所以返回false;为了使isOdd函数能正确处理负数,我们可以把i%2==1; 改为 i%2!=0; 这个谜告诉我们定义上正确的事情,编程逻辑上可能并不正确。
2. 这里的逻辑错在并非所有的小数都可以用二进制浮点数精确表示。在这里即2.00及1.10并不能被精确表示为浮点数,java会采用最接近的浮点数表示,但遗憾的是这个最接近的浮点数并非我们所期待的,所以对于浮点数的运算大家要小心了哈。(想起以前自己在这点上也被折腾得够呛的了额)www.zzzyk.com
3. 这里发生了溢出。溢出?也许你会问,声明为long类型也会溢出?对,就是溢出。因为等式右边的24,60,1000都是int类型的,它们所得的结果也会是int类型的(溢出了),所以再赋给a的结果已经是截值后的错误数据了(发生了int-》long的类型转换?错误的结果再转换有什么意义?); 为了防止溢出,我们应该在表达式中的一个或者多个乘数末尾加上L以使表达式正确转换为long类型再运算。 即a = 24L*60*60*1000;等等....
4. 这里错在,我忽悠你了,嘿嘿。其实这里的5432l 是54321L啊,好吧,别生气,写在这里也只为了提醒各位要注意尽量不要使用让自己或别人看着糊涂的变量及表达式。(发一下牢易做图,我国的考试不是经常这么考的么,现在想想,哎考得真无聊。)
作者:stewen_001
补充:软件开发 , Java ,