+=
Обычно считают, что в Java x += y (и аналогично -=, *= и т.п.) является лишь сокращённой записью x = x + y. Но это не вся правда. Посмотрим на следующий пример:
short s = 1;
s = s + 1;
Этот код не компилируется, несмотря на то, что 1 + 1 = 2 представимо типом short! Причина не только в том, что литерал 1 имеет тип int. Не будет компилироваться и такой вариант:
short s1 = 1;
short s2 = 1;
s2 = s2 + s1;
То же самое можно было бы написать с типами byte и char. Причина в том, что результат арифметических операций с использованием типов short, byte, char имеет тип int. Мотивация этого такова: к примеру, сумма двух byte может легко быть больше того, что влезет в byte. Но код можно исправить следующим образом без явного преобразования типов:
short s = 1;
s += 1;
short s1 = 1;
short s2 = 1;
s2 += s1;
На самом деле x += y, вопреки распространённому мнению, эквивалентно
x = (тип x) (x + y);
Т.е. включает в себя преобразование результата к типу x. То же самое верно и для операторов -=, *= и т.п.
Комментариев нет:
Отправить комментарий