求解释下述Java代码的运算输出过程,为何结果与预期不符
Java表达式运算流程解释
首先给出你提供的代码:
int p=15, q=12, s; s=p/q*++p%(++p%--q); System.out.print(s);
核心前置规则
很多人计算错误的核心原因是混淆了运算符优先级和操作数求值顺序,Java遵守两个明确的规则:
- 运算符优先级:前置自增/自减 > 乘、除、模运算 > 加减运算,同优先级运算符按从左到右结合
- 操作数求值顺序:所有运算符的操作数严格按从左到右的顺序求值,不会优先计算高优先级运算符的操作数
完整运算步骤
初始值:p=15,q=12,我们按从左到右的顺序依次计算每个操作数,再结合优先级运算:
- 先计算
/的左操作数p:值为15 - 计算
/的右操作数q:值为12 - 执行
15 / 12:整数除法结果为1 - 计算
*的右操作数++p:p自增为16,该操作数值为16 - 执行
1 * 16:结果为16 - 计算
%的右操作数,即括号内的(++p % --q):- 先计算括号内
%的左操作数++p:p自增为17,该操作数值为17 - 再计算括号内
%的右操作数--q:q自减为11,该操作数值为11 - 执行
17 % 11:结果为6
- 先计算括号内
- 执行
16 % 6:结果为4 - 将4赋值给s,最终输出结果为4
常见计算误区
你算出结果为2,大概率是错误地优先计算了所有前置自增/自减表达式,再代入剩余运算。Java不会先把所有高优先级的子表达式全部提前求值,只会在轮到该操作数参与运算时才计算对应的值。
内容的提问来源于stack exchange,提问作者Anmol Rajput
相关产品推荐
相关产品推荐

