在表达式内部使用赋值运算符

时间:2018-12-28 16:42:12

标签: java operators assignment-operator operator-precedence

运行该代码将在我预期为20时返回11。为什么会这样?

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

1 个答案:

答案 0 :(得分:3)

评估是从左到右。所以

int y = x + (x = 10);

是(最初是x1):

int y = 1 + 10;

将作业放在()中不会使作业排在第一位。它只是确保它是一个有效的表达式,因为y = x + x = 10将是y = (x + x) = 10,这将需要分配给不是变量的某些东西(x + x)。

如果要20,请将作业放在第一位:

int y = (x = 10) + x;

当然,在大多数情况下,绝大多数,最好避免出现此类副作用,并在表达式的外部 中分配x的值,必要时将表达式分解。表达式内分配有时可能有用(特别是while ((blah = getNextBlah()) != null)之类的东西),但仅在有限的情况下才有用。