2

我最近一直在使用 Java 的 byte 原语,但遇到了一个愚蠢的问题:

byte a = 10;
byte b = 9;
byte c = 8;
b += b*c;    // how come this statement is correct without any explicit type casting
b =  b*c;    // while this statement is incorrect; it requires explicit cast, of course
b = b+(b*c); // this is wrong too.

所以我的问题是,+=除了添加和分配之外,是否指定了任何分配,或者这是 Java 中的错误(我几乎可以肯定不是)?

4

2 回答 2

7

因为b += b*c相当于b += (byte) ((b) + (b*c))

来自复合赋值运算符的 Java 语言规范:

E1 op= E2 形式的复合赋值表达式等价于 E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型,除了 E1 只计算一次。

于 2013-06-07T20:23:16.807 回答
6

所有复合赋值运算符不仅执行操作,而且自动将其结果转换为左侧变量的类型。

因此,您的 += 不仅添加变量并分配结果 - 它还将结果转换为正确的类型。

于 2013-06-07T20:19:14.557 回答