Java 在表达式内部使用赋值运算符
运行此代码将返回11,而我预期的是20。为什么会这样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;
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;