java中的速记运算符如何与普通运算符不同?

时间:2017-08-15 08:43:18

标签: java operators

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

byte x = 10;
x = x + 10;

正在给出错误

byte x = 10;
x += 10;

正在编译

1 个答案:

答案 0 :(得分:2)

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);

所以在你的情况下你的第二个陈述等于

x = (byte) x + 10;

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