Страницы

Поиск по вопросам

вторник, 2 октября 2018 г.

Оператор += в Java

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

Комментариев нет:

Отправить комментарий