【发布时间】:2011-02-11 20:52:42
【问题描述】:
由于复合赋值和递增/递减运算符中的隐式转换,以下编译:
byte b = 0;
++b; b++; --b; b--;
b += b -= b *= b /= b %= b;
b <<= b >>= b >>>= b;
b |= b &= b ^= b;
由于自动装箱和自动拆箱,以下代码也可以编译:
Integer ii = 0;
++ii; ii++; --ii; ii--;
ii += ii -= ii *= ii /= ii %= ii;
ii <<= ii >>= ii >>>= ii;
ii |= ii &= ii ^= ii;
然而,以下 sn-p 的最后一行给出了编译时错误:
Byte bb = 0;
++bb; bb++; --bb; bb--; // ... okay so far!
bb += bb; // DOESN'T COMPILE!!!
// "The operator += is undefined for the argument type(s) Byte, byte"
谁能帮我弄清楚这里发生了什么? byte b 版本编译得很好,所以 Byte bb 不应该效仿并根据需要进行适当的装箱和拆箱以适应吗?
补充问题
那么有没有办法让复合赋值运算符与左侧的Byte、Character 和Short 一起使用,或者它们是否只是非法的(!!!)对于这些类型?
【问题讨论】:
标签: java compiler-errors autoboxing implicit-conversion compound-assignment