5

考虑这段代码:

byte b=1;
long l=1000;
b += l;

我希望最后一条语句需要显式转换,因为, b+=l被评估为b = b+l并且 (b+l)部分给出一个整数。如果没有显式强制转换,整数不能分配给字节?

4

1 回答 1

17

好的开始,b+l给出一个long,而不是int......

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

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

注意转换为T.

于 2012-11-28T11:01:31.947 回答