(x = x + y) или (x += y) — отличия в приведении типов

1,00
р.
Столкнулся с таким вот свойством сложения. У нас есть две переменные:
int x = 1 long y = 2
y нужно прибавить к x. Если мы воспользуемся простым сложением, то IDE откажется компилировать:
x = x + y //Incopatible types
Если же мы пользуемся следующей конструкцией:
x += y
то код обрабатывается корректно.
Ошибка понятна — мы пытаемся запихнуть long в int, IDE видит потенциальную ошибку и не даёт скомпилировать. Но почему проходит во втором случае?

Ответ
var1 op= var2 равносильно var1 = (T)((var1) op (var2)), где op - оператор.
Пример:
int x = 2 double y = 4.6
Данная строка x += y равносильна нижней:
x = (int)(x + y)
Документация: 15.26.2. Compound Assignment Operators