Как поделить тип данных Short на Byte?
Почему в Java не получается поделить тип данных short на byte с последующим приведением результата к типу short? Почему не происходит автоматического перевода результата в short, он же больше byte?
public class Main {
public static void main(String[] args) {
short a = 250;
byte b = 2;
short c = (short) (a / b);
// это работает, но почему нужно явно указывать (short)?
// int c = a / b;
// почему если переменную сделать типом int,
// явно указывать тип не нужно?
System.out.println(c);
}
}
Ответы (2 шт):
Автор решения: DronDron
→ Ссылка
Всё просто. Результат a / b получается int. А большие типы автоматически не приводятся к меньшим.
Автор решения: Vadik
→ Ссылка
Ответ содержится в спецификации Java, §5.6.2. Для операций с двумя операндами (*, /, +, - и другие) типы меняются в следующем порядке:
- Если один из операндов типа
double, второй конвертируется вdouble. - Иначе, если один из операндов типа
float, второй конвертируется вfloat. - Иначе, если один из операндов типа
long, второй конвертируется вlong. - Иначе, оба операнда конвертируются в
int.
В вашем случае первый операнд имеет тип short, а второй — byte, поэтому они оба конвертируются в int.