由于复合赋值和递增/递减运算符中的隐式转换,以下编译:
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;
然而,以下代码段中的最后一行给出了编译时错误:
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