如果我有一个字节变量: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 += 1b = (byte)(b + 1)等效,所以b + 1的类型被提升为int(JLS §5.6.2 Binary Numeric Promotion),因此,如果不进行显式转换,则无法将其结果分配给byte

JLS, §15.26.2 Compound Assignment Operators:

07-25 22:10
查看更多