До настоящего времени я считал, что запись i += j есть то же самое, что и i = i + j Однако если взять int i = 5 long j = 8 То выражение i = i + j не скомпилируется, в то время как i += j будет компилироваться без проблем. Означает ли, что i += j эквивалентно чему-то вроде i = (type of i) (i + j)?
Ответ Ответ можно найти в спецификациях Java, §15.26.2 Compound Assignment Operators: Присваивание вида E1 op= E2 эквивалентно выражению E1 = (T) ((E1) op (E2)), где T — тип E1. Отличие состоит лишь в том, что E1 вычисляется только один раз. Далее, там есть следующий пример: Данный код является корректным: short x = 3 x += 4.6 В результате получаем для x значение 7, так как это эквивалентно: short x = 3 x = (short)(x + 4.6)