До настоящего времени я считал, что запись
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);
Другими словами, ваши догадки верны.
Комментариев нет:
Отправить комментарий