Почему сумма байтов целая?

У меня есть переменная tyo byte

byte a = 3;
byte b = 4;

Если я суммирую их, значение суммы будет целым.

byte z = a+b  //error, left side is byte, right side is integer

Почему a+b — это int?


person user2693979    schedule 19.02.2014    source источник
comment
Для byte нет оператора +. byte повышается до int перед обработкой +.   -  person Hot Licks    schedule 20.02.2014
comment
Я ожидаю, что сумма байтов будет байтом.   -  person user2693979    schedule 20.02.2014
comment
@user2693979 user2693979 ваши ожидания и спецификация языка различаются;)   -  person Brian Roach    schedule 20.02.2014


Ответы (1)


Поскольку Спецификация языка Java так говорит

Двоичное числовое продвижение выполняется над операндами (§5.6.2).

Обратите внимание, что двоичное числовое продвижение выполняет преобразование набора значений (§5.1.13) и может выполнять преобразование распаковки (§5.1.8).

Типом аддитивного выражения для числовых операндов является расширенный тип его операндов.

и относительно числового продвижения,

Расширение примитивного преобразования (§5.1.2) применяется для преобразования одного или обоих операндов в соответствии со следующими правилами:

  • [...]
  • В противном случае оба операнда преобразуются в тип int.

Таким образом, значения byte преобразуются в значения int и суммируются. Результатом выражения является продвигаемый тип, поэтому int.

Вы можете просто привести результат

byte z = (byte) (b + a);

но будьте осторожны с переполнением/недополнением.

person Sotirios Delimanolis    schedule 19.02.2014