如果我有一个字节变量:byte b = 0;
为什么以下工作有效:
b++;
b += 1; // compiles
...但这不?
b = b + 1; // compile error
编译器首先理解为byte
第二个是int
?
[EDIT]
我知道选角,但我想提请你注意b++, b += 1 and b = b + 1
我认为它们是相等的,那么为什么编译器会区分它们呢?有什么区别
b += 1 and b = b + 1 ?
Because b += 1
相当于b = (byte)(b + 1)
,而类型b + 1
被提升为int
(JLS §5.6.2 二进制数字提升),因此它的结果不能分配给byte
无需显式转换。
From JLS,§15.26.2 复合赋值运算符:
E1 op= E2 形式的复合赋值表达式等效于 E1 = (T)((E1) op (E2)),其中 T 是 E1 的类型,但 E1 仅计算一次。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)