You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java赋值运算符优先级疑问:两种赋值表达式结果为何不同?

Java表达式求值顺序解析:两个案例的运行逻辑

案例1代码与结果

int x,a = 100;
x = a + (a=6);
System.out.println(x);  //prints 106

逻辑解析

Java规定表达式的操作数是从左到右依次求值的,运算符优先级仅决定运算的分组方式,不会改变操作数的求值顺序。在a + (a=6)这个表达式中:

  1. 首先计算左侧的操作数a,此时a的初始值为100,得到结果100;
  2. 接着计算右侧括号内的赋值表达式a=6,这个表达式的返回值是6,同时将变量a更新为6;
  3. 最后执行加法运算:100 + 6 = 106,赋值给x,所以输出106。

案例2代码与结果

int x,a =100;
x = (a=6) + a;
System.out.println(x);  //prints 12

逻辑解析

同样遵循从左到右的操作数求值规则:

  1. 首先计算左侧括号内的a=6,赋值后a的值变为6,该表达式的返回值也是6;
  2. 接着计算右侧的操作数a,此时a已经是6,得到结果6;
  3. 执行加法运算:6 + 6 = 12,赋值给x,所以输出12。

关于优先级的疑问解答

案例1中没有优先执行a=6,核心原因是Java的求值顺序是操作数从左到右,而非先执行括号内的操作。括号的作用是改变运算的优先级(让赋值先于加法完成),但不会打破操作数从左到右的求值规则——左侧的a会在括号内的表达式之前被求值。

内容的提问来源于stack exchange,提问作者Manoj Ariyarathna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:41:04