今天跟同学在同学在看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可能会有精度损失。
}
}
想不通。
查阅资料,资料上说:
* 复合运算符做运算时会自动把右边的类型转换为左边的类型 。 *
。。。。。。。。。迷到怀疑人生。
* 最后的正解 *
参见下面的Stack Overflow的回复: a += b
cast like a = (byte)(a + b)