Столкнулся с таким вот свойством сложения. У нас есть две переменные:
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
Комментариев нет:
Отправить комментарий