2012-11-28 34 views
5

考虑以下代码:为什么此作业不需要显式演员?

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

我希望最后的语句需要显式造型,因为, b+=l作为b = b+l(b+l)部分给出了一个整数评估。 整数不能分配给没有明确转换的字节?

+0

[Java + = operator](http://stackoverflow.com/questions/8710619/java-operator) – assylias

回答

17

好下手,b+l给人以long,不是int ......

...但复合赋值运算符有其他行为。按照JLS section 15.26.2

形式E1 OP的化合物赋值表达式= E2相当于E1 =(T)((E1)OP(E2)),其中T是E1的类型,不同的是E1只评估一次。

注意剧组为T

+2

的可能重复您可以观察手动写入b = b + l时的差异;那么你会看到你想要的错误:-) –

+0

对不起,b + l给了很长时间。我需要更多地阅读oracle文档。谢谢。 – PrashanD

相关问题