今天跟同学在同学在看Java时发现一个问题,知道结果后也是被惊到了。代码如下;
public class demo{ public static void main(String[] args){ byte b = 45; double d = 45.45; b += d; System.out.println(b); //输出为90 } }
不应该啊???double转换为byte不是应该强制转换吗?接下来,把b+=d变为b=b+d又发现:
public class demo{ public static void main(String[] args){ byte b = 45; double d = 45.45; b = b + d; System.out.println(b); //错误:不兼容的类型。从double到byte可能会有精度损失。 } }
想不通。跪求大佬们解答。
推荐一篇博文 Java总结篇系列:类型转换/造型,也许你自己能找到答案
你好,感谢解答,实在是帮了我的大忙!
但我仍有一点不解:同样的参数,为什么使用符合运算符+=和单独使用+算出来的结果会不同呢?难道是 +=的运算机制和+不同吗?
还望解惑,感谢。
@imilano: b += d;
实际是b = (byte)(b + a);
,详见 stackoverflow 上的这个回答中的回复:
The compound Operator (+=) cast the result like b = (byte) (b + a);
@dudu: 谢谢!
算是有了一个新的认识了哈哈。
十分感谢。
对了,还有一个小问题:
b += d
转换为
b = byte(b+d)
是JVM做的优化吗?
@imilano: 我也不知道是JVM还是编译器的优化,你可以自己找出答案
@dudu: 十分感谢 !
学习了学习了