Java复合赋值运算中变量更新时机疑问:为何复用x初始值?
解析Java复合赋值表达式的求值逻辑
首先纠正你的核心误解:Java不会等到整条语句结束后才更新变量值,复合赋值运算符(+=、-=等)执行完成后会立即修改对应变量的值,后续表达式会直接使用更新后的变量值。
一步步拆解你的代码表达式
你的代码:
class HelloWorld { public static void main(String[] args) { int x = 10; int y = 20; int z = x += y -= x += y; System.out.println(z); } }
复合赋值运算符是右结合的,所以表达式x += y -= x += y会从最右侧的子表达式开始计算,步骤如下:
初始值:x=10,y=20
计算最右侧的
x += y:- 取当前
x=10和y=20,计算10+20=30 - 将结果赋值给
x,此时x=30 - 该子表达式的结果为
30
- 取当前
计算
y -= 30(用上一步的结果):- 取当前
y=20,计算20-30=-10 - 将结果赋值给
y,此时y=-10 - 该子表达式的结果为
-10
- 取当前
计算
x += -10(用上一步的结果):- 取当前
x=30,计算30 + (-10)=20 - 将结果赋值给
x,此时x=20 - 该子表达式的结果为
20,最终赋值给z
- 取当前
所以这段代码的实际输出应为20,而非你所说的0——可能是你看错了输出或代码书写有误。
解答你的疑问
- 赋值操作的意义:赋值的核心就是立即修改变量的值,后续表达式会依赖这些更新后的值计算,这和
z = x + y - (x + y)完全不等价。后者只是用变量初始值做纯计算,不会修改任何变量;而前者会多次修改x和y,后续步骤的计算都基于更新后的值。 - 关于变量值的使用:你的补充疑问不成立,后续表达式并没有使用
x的初始值10。比如y -= x += y中,x += y已经把x更新为30,y的计算就是基于这个30进行的,最后x又被更新为20。
内容的提问来源于stack exchange,提问作者Janb
相关产品推荐
相关产品推荐

