Сложение 2 чисел типа short в Java

1,00
р.
Итак, тип short - 16 бит, от -32768 до 32767.
Простой код:
short x1 = 5, x2 = 38 x1 = x1 + x2 System.out.println(x1)
Ругается на ошибку во 2 строке, просит привести к типу int:
Uncompilable source code - incompatible types: possible lossy conversion from int to short
Хотя казалось бы, почему - сложение двух чисел одного типа.
Но такой код, как ни странно, работает без ошибок:
short x1 = 5, x2 = 38 x1 += x2 System.out.println(x1)
Вывод: 43
Почему?

Ответ
Любые арифметические операции над типом short на выходе дают int (результат автоматически кастуется в int). В случае же с x1 += x2 по факту происходит x1 = (short) (x1 + x2)
При вычислении выражения (a @ b) аргументы a и b преобразуются в числа, имеющие одинаковый тип:
если одно из чисел double, то в double иначе, если одно из чисел float, то в float иначе, если одно из чисел long, то в long иначе, оба числа преобразуются в int
То есть, все целочисленные литералы в выражениях, а так же типы byte, short и char расширяются до int.