Страницы

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

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

(x = x + y) или (x += y) — отличия в приведении типов

Столкнулся с таким вот свойством сложения. У нас есть две переменные:
int x = 1; long y = 2;
y нужно прибавить к x. Если мы воспользуемся простым сложением, то IDE откажется компилировать:
x = x + y; //Incopatible types
Если же мы пользуемся следующей конструкцией:
x += y;
то код обрабатывается корректно.
Ошибка понятна — мы пытаемся запихнуть long в int, IDE видит потенциальную ошибку и не даёт скомпилировать. Но почему проходит во втором случае?


Ответ

var1 op= var2 равносильно var1 = (T)((var1) op (var2)), где op - оператор
Пример:
int x = 2; double y = 4.6;
Данная строка x += y; равносильна нижней
x = (int)(x + y);
Документация: 15.26.2. Compound Assignment Operators

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

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