为什么这个赋值不需要显式转换?

Pra*_*anD 5 java casting operators

考虑以下代码:

byte b=1;
long l=1000;
b += l;
Run Code Online (Sandbox Code Playgroud)

我希望最后一个语句需要一个显式的强制转换因为, b+=l被评估为,b = b+l(b+l)part给出一个整数.没有显式强制转换,无法将整数分配给byte?

Jon*_*eet 17

那么首先,b+l给出一个long,而不是int......

...但复合赋值运算符具有其他行为.根据JLS第15.26.2节:

形式E1 OP = E2中的化合物,赋值表达式等价于E1 =(T)((E1)OP(E2)),其中T是E1的类型,不同的是E1只计算一次.

请注意演员表T.

  • 你可以在手动写b = b + l时观察差异; 然后你会看到你想要的错误:-) (2认同)