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

176
23 сентября 2017, 21:48

Столкнулся с таким вот свойством сложения. У нас есть две переменные:

int x = 1;
long y = 2;

y нужно прибавить к x. Если мы воспользуемся простым сложением, то IDE откажется компилировать:

x = x + y;    //Incopatible types

Если же мы пользуемся следующей конструкцией:

x += y;

то код обрабатывается корректно.

Ошибка понятна — мы пытаемся запихнуть long в int, IDE видит потенциальную ошибку и не даёт скомпилировать. Но почему проходит во втором случае?

Answer 1

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

READ ALSO
Вывод буквы при нажатий на кнопку

Вывод буквы при нажатий на кнопку

Добрый деньКак сделать типичный Logo quiz app, чтобы при нажатий на буквы textview заполнялся и проверял ответ

230
Java jax-rs response - Java EE return list

Java jax-rs response - Java EE return list

Не могу разобраться с java jax-rs responseЕсть вот такой вот код:

271
Запуск файла по пути

Запуск файла по пути

Всем доброго дня, в моей программе хочу реализовать возможность быстрого запуска определённых программ, тыкнул по кнопочке раз и все программы...

205
Заполнить 3-мерный массив случайными числами от 0 до 1

Заполнить 3-мерный массив случайными числами от 0 до 1

Пытаюсь заполнить трёхмерный массив случайными числами от 0 до 1:

279