Java运算符疑问:println中x++与x=x+1的执行时机差异
为什么
x++在打印后自增,而x=x+1在打印前完成计算? 这问题问到点子上了!本质是Java里后置自增运算符和赋值表达式的求值规则不一样,咱们一步步拆解你的代码例子:
先看你的代码:
int x = 3; System.out.println("Ans: " + (x++)); System.out.println("Ans: " + (x=x+1));
输出是Ans: 3和Ans: 5,原因如下:
1. 关于x++(后置自增运算符)
x++属于后置自增,它的执行逻辑是:
- 第一步:先返回变量
x当前的原始值作为整个表达式的结果 - 第二步:再把
x的值加1
所以当执行System.out.println("Ans: " + (x++))时:
- 首先计算括号里的
x++:先取x的当前值3作为表达式结果,然后x被更新为4 - 接着把这个结果和字符串拼接,打印出
Ans: 3
2. 关于x=x+1(赋值表达式)
Java里的赋值表达式x = 表达式,执行逻辑是:
- 第一步:先计算等号右边的表达式的值
- 第二步:把计算结果赋值给左边的变量
x - 第三步:整个赋值表达式的结果就是这个新赋值的值
所以当执行System.out.println("Ans: " + (x=x+1))时:
- 此时
x的值是4,先计算右边的x+1,得到5 - 把5赋值给
x,现在x变成5 - 整个
x=x+1表达式的结果就是5,和字符串拼接后打印出Ans: 5
再用分步代码验证一下
把你的代码拆成更细的步骤,就看得更清楚了:
int x = 3; // 处理x++的情况 int result1 = x++; // result1拿到3,x变成4 System.out.println("Ans: " + result1); // 输出3 // 处理x=x+1的情况 int result2 = x = x + 1; // 先算x+1=5,赋值给x,result2拿到5 System.out.println("Ans: " + result2); // 输出5
简单总结一下核心区别:
x++:先取值,后自增x=x+1:先算新值,赋值后返回新值
内容的提问来源于stack exchange,提问作者nrcjea001
相关产品推荐
相关产品推荐

