Как поделить тип данных 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.

→ Ссылка