Использование оператора присваивания внутри выражения - PullRequest
0 голосов
/ 28 декабря 2018

Запуск этого кода вернет 11, а я ожидал 20. Почему это так?

int x = 1;
int y = x + (x = 10);
System.out.println(y);

1 Ответ

0 голосов
/ 28 декабря 2018

Оценка слева направо.Таким образом,

int y = x + (x = 10);

x изначально 1):

int y = 1 + 10;

Если присвоить присвоение в (), оно не будет первым.Это просто гарантирует, что это правильное выражение, поскольку y = x + x = 10 будет y = (x + x) = 10, что потребует присвоения чему-то (x + x), который не является переменной.

Если вы хотите 20, поместите присвоениепервое:

int y = (x = 10) + x;

Конечно, в подавляющем большинстве случаев 1020 * лучше избегать подобных побочных эффектов и присваивать x значение за пределами выражения, при необходимости разбивая выражение.Иногда присваивание внутри выражения может быть полезно (особенно while ((blah = getNextBlah()) != null)), но только в ограниченных ситуациях.

...