为什么b = b + 8引发错误,而b + = 8剂量。
indent="yes"
答案 0 :(得分:0)
这是因为b=b+8
与b+=8
并不完全等效。
根据语言规范,第15.26.2节:
格式为
E1 op= E2
的复合赋值表达式与E1 = (T) ((E1) op (E2))
等效,其中T
是E1
的类型,除了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
。