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

Java 在表达式内部使用赋值运算符,java,operators,assignment-operator,operator-precedence,Java,Operators,Assignment Operator,Operator Precedence,运行此代码将返回11,而我预期的是20。为什么会这样 int x = 1; int y = x + (x = 10); System.out.println(y); 评估从左到右。所以 int y = x + (x = 10); is(最初带有x的1): 把作业放在()中并不能让它排在第一位。它只是确保它是一个有效的表达式,因为y=x+x=10将是y=(x+x)=10,这将需要分配给不是变量的某个(x+x) 如果您想要20,请将作业放在第一位: int y = (x = 10) + x;

运行此代码将返回11,而我预期的是20。为什么会这样

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

评估从左到右。所以

int y = x + (x = 10);
is(最初带有
x
1
):

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

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

int y = (x = 10) + x;


当然,大多数情况下,最好避免这些副作用,并在表达式之外指定一个值,必要时将表达式拆分。表达式中的赋值有时很有用(特别是
而((blah=getNextBlah())!=null)
之类的东西),但只有在有限的情况下才有用。

为什么期望20?求值是从左到右的。@NicholasK,因为我没有赋值(x=10)我认为赋值将首先计算,然后计算x值10@TomHawtin-塔克林明白了。所以(x=10)括号不算数?@bhusak括号只影响解析,所以“x=10+x”不同于
(x=10)+x
int y = (x = 10) + x;