首页 新闻 会员 周边

java运算把都变了赋值给byte竟然合法???求解

0
[待解决问题]

今天跟同学在同学在看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可能会有精度损失。
}
} 

 

 

想不通。跪求大佬们解答。

imilano的主页 imilano | 菜鸟二级 | 园豆:202
提问于:2018-02-27 21:22
< >
分享
所有回答(2)
0

推荐一篇博文 Java总结篇系列:类型转换/造型,也许你自己能找到答案

dudu | 园豆:31003 (高人七级) | 2018-02-27 22:34

 你好,感谢解答,实在是帮了我的大忙!

 

但我仍有一点不解:同样的参数,为什么使用符合运算符+=和单独使用+算出来的结果会不同呢?难道是 +=的运算机制和+不同吗?

 

还望解惑,感谢。

支持(0) 反对(0) imilano | 园豆:202 (菜鸟二级) | 2018-02-28 08:44

@imilano: b += d;实际是b = (byte)(b + a);,详见 stackoverflow 上的这个回答中的回复:

The compound Operator (+=) cast the result like b = (byte) (b + a);

支持(1) 反对(0) dudu | 园豆:31003 (高人七级) | 2018-02-28 12:04

@dudu: 谢谢!

 

算是有了一个新的认识了哈哈。

十分感谢。

对了,还有一个小问题:

b += d

转换为

b = byte(b+d)

是JVM做的优化吗?

支持(0) 反对(0) imilano | 园豆:202 (菜鸟二级) | 2018-02-28 12:24

@imilano: 我也不知道是JVM还是编译器的优化,你可以自己找出答案

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2018-02-28 15:06

@dudu: 十分感谢 !

支持(0) 反对(0) imilano | 园豆:202 (菜鸟二级) | 2018-02-28 15:07
0

学习了学习了

西红柿里没有番茄 | 园豆:645 (小虾三级) | 2018-03-21 09:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册