运行该代码将在我预期为20时返回11。为什么会这样?
int x = 1;
int y = x + (x = 10);
System.out.println(y);
答案 0 :(得分:3)
评估是从左到右。所以
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)
之类的东西),但仅在有限的情况下才有用。