【发布时间】:2015-08-27 06:13:04
【问题描述】:
这是Java编译器允许的,它在做什么?
int x = x = 1;
我知道 x 是分配给 x 的,但它怎么会有两个=s?
【问题讨论】:
-
你编译了吗?比你不问我们就知道第一个问题的答案
-
Eclipse 说 x 被设置为 x。
标签: java
这是Java编译器允许的,它在做什么?
int x = x = 1;
我知道 x 是分配给 x 的,但它怎么会有两个=s?
【问题讨论】:
标签: java
x = 1 将值 1 分配给 x 并“返回”1,它允许这样的事情:
while ((line = reader.readLine()) != null)
【讨论】:
从右到左读取赋值语句:
有12个赋值运算符;都是语法上的 右关联(它们从右到左分组)。因此,a=b=c 意味着 a=(b=c),将c的值赋给b,然后赋值 从 b 到 a。
所以,
int x = x = 1;
和
一样x = (x = 1);
然后
x = 1; x = x;
【讨论】:
int x 将x 放入堆栈。
右侧部分x = 1 将1 分配给x。但这是一个值为 1 的 表达式。
最后重新分配给x。
【讨论】: