不兼容的类型:从int到字节错误的可能有损转换?

时间:2019-03-24 10:36:42

标签: java

为什么b = b + 8引发错误,而b + = 8剂量。

indent="yes"

1 个答案:

答案 0 :(得分:0)

这是因为b=b+8b+=8并不完全等效。

根据语言规范,第15.26.2节:

  

格式为E1 op= E2的复合赋值表达式与E1 = (T) ((E1) op (E2))等效,其中TE1的类型,除了E1仅被求值一次。

它也为您提供了一个示例:

  

例如,以下代码是正确的:

short x = 3;
x += 4.6;
     

并导致x的值为7,因为它等效于:

short x = 3;
x = (short)(x + 4.6);

因此+=不仅将和分配给变量,而且还将和强制转换为左侧变量的类型。 b=b+8不会这样做。

为什么b=b+8会产生警告?

这是因为在+类型上使用byte运算符时,它还会执行数字提升。表达式b+8的类型实际上是int。因此,编译器告诉您您正在将int转换为byte