Java中x += (x=5)输出15而非10,为何与预期不符?
代码输出15而非10的原因解析
先看你的代码:
class Main { public static void main(String[] ARGS){ int x = 10; x += (x=5); System.out.println(x); } }
你预期输出10,是误以为会先执行x=5,再算x += x得到5+5=10,但Java里复合赋值运算符(+=这类)的执行逻辑不是这样的:
- 执行
x += 表达式时,Java会先提前获取左侧变量x的当前值,并把这个值暂存起来。这里x初始是10,所以暂存的值是10。 - 然后才会计算右侧的表达式
(x=5):这一步把x赋值为5,此时x的当前值变成了5,但之前暂存的10不受影响。 - 最后用暂存的10加上右侧表达式的结果5,得到15,再把15赋值给x。
所以最终x的值是15,而不是你预期的10。核心是复合赋值运算符会先锁定左侧变量的原始值,再处理右侧的赋值操作,不是用右侧赋值后的x值来计算。
内容的提问来源于stack exchange,提问作者BALAJI S
相关产品推荐
相关产品推荐

