Java 中的速记运算符与普通运算符有何不同?



我知道默认情况下数字在 Java 中存储为整数,但是

byte x = 10;
x = x + 10;

byte x = 10;
x += 10;

编译正常

JLS 为你提供答案

形式为 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);

所以在你的情况下,你的第二个陈述 equlas 到

x = (byte) x + 10;

这就是编译器感到高兴的原因。