如果我有一个字节变量:byte b = 0;
为什么下面的工作:
b++;
b += 1; // compiles
...但这不是吗?
b = b + 1; // compile error
编译器是否首先将其理解为
byte
,然后将其理解为int
?[编辑]
我知道 Actor ,但我想引起您对
b++, b += 1 and b = b + 1
的关注我认为它们是相等的,那么为什么编译器将它们不同?之间有什么区别
b += 1 and b = b + 1 ?
最佳答案
因为b += 1
与b = (byte)(b + 1)
等效,所以b + 1
的类型被提升为int
(JLS §5.6.2 Binary Numeric Promotion),因此,如果不进行显式转换,则无法将其结果分配给byte
。
从JLS, §15.26.2 Compound Assignment Operators: