У меня есть переменная tyo byte
byte a = 3;
byte b = 4;
Если я суммирую их, значение суммы будет целым.
byte z = a+b //error, left side is byte, right side is integer
Почему a+b — это int?
У меня есть переменная tyo byte
byte a = 3;
byte b = 4;
Если я суммирую их, значение суммы будет целым.
byte z = a+b //error, left side is byte, right side is integer
Почему a+b — это int?
Поскольку Спецификация языка Java а> так говорит
Двоичное числовое продвижение выполняется над операндами (§5.6.2).
Обратите внимание, что двоичное числовое продвижение выполняет преобразование набора значений (§5.1.13) и может выполнять преобразование распаковки (§5.1.8).
Типом аддитивного выражения для числовых операндов является расширенный тип его операндов.
и относительно числового продвижения а>,
Расширение примитивного преобразования (§5.1.2) применяется для преобразования одного или обоих операндов в соответствии со следующими правилами:
- [...]
- В противном случае оба операнда преобразуются в тип
int
.
Таким образом, значения byte
преобразуются в значения int
и суммируются. Результатом выражения является продвигаемый тип, поэтому int
.
Вы можете просто привести результат
byte z = (byte) (b + a);
но будьте осторожны с переполнением/недополнением.
byte
нет оператора+
.byte
повышается доint
перед обработкой+
. - person Hot Licks   schedule 20.02.2014