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

Using assignment operator inside of expression

运行 此代码将 return 11 而我期待 20。为什么会这样?

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

评价是从左到右。所以

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;

当然,广大大多数时候,最好避免这些副作用并在 x 之外分配一个值 表达式,必要时分解表达式。表达式内赋值有时很有用(特别是 while ((blah = getNextBlah()) != null) 之类的事情),但仅在有限的情况下。