在表达式内部使用赋值运算符
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)
之类的事情),但仅在有限的情况下。
运行 此代码将 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)
之类的事情),但仅在有限的情况下。