Страницы

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

вторник, 26 ноября 2019 г.

Оператор += в 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)?
    


Ответы

Ответ 1



Ответ можно найти в спецификациях 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); Другими словами, ваши догадки верны.

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

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