提问人:bhusak 提问时间:12/29/2018 最后编辑:Tom Hawtin - tacklinebhusak 更新时间:12/29/2018 访问量:127
在表达式中使用赋值运算符
Using assignment operator inside of expression
问:
运行此代码将返回 11,而我期望返回 20。为什么会这样?
int x = 1;
int y = x + (x = 10);
System.out.println(y);
答:
3赞
2 revsT.J. Crowder
#1
评估从左到右。所以
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)
评论
(x = 10) + x