Авто (не) бокс не работает для составного назначения
Благодаря неявному приведению в составных присваиваниях и операторах увеличения / уменьшения, следующие компиляции:
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
на левой стороне, или онипросто незаконно (!!!) для этих типов?