<Java>你知道i=i++的运行结果是怎么计算的吗?

有如下一段代码,可以先尝试计算一些运行的结果

    public static void main(String[] args) {
            int i = 1;
            i = i++;
            int j = i++;
            int k = i + ++i * i++;
            System.out.println("i=" + i);
            System.out.println("j=" + j);
            System.out.println("k=" + k);
    }

.
.
.
.
.
.
.
.
.
.
.
.

运行结果

i=4
j=1
k=11

分析如下
在这里插入图片描述
int i=1; 这句执行结束后局部变量表中i的值就为1

i=i++; 执行这一句过程如下
①把i的值压入操作数栈,那么操作数栈中值为1
②执行i++操作,那么局部变量表中i的值为2
③最后执行赋值操作,把操作数栈中的值赋值给i,于是局部变量表中i的值被覆盖,变成1,因此i=1

int j=i++
①先把i的值压入操作数栈,那么操作数栈中值为1
②执行i++操作,局部变量表中i的值就变为2
③最后执行赋值操作,此时操作数栈中的值为1,因此j赋值为1,此时j=1,i=2

int k=i + ++i * i++;
虽然是先算乘法,但是压入操作数栈的过程是从左到右

因此过程如下
①先将i的值压入操作数栈,操作数栈的值为2
②执行++i操作,那么局部变量表中i的值就变为3
③注意,由于等式右边的计算尚未结束,因此i的值要压入操作数栈,因此栈中有两个元素,[2,3] (右边为栈顶)
④执行i++,先将i的值压入操作数栈,此时栈中有三个元素,[2,3,3] (右边为栈顶),然后执行i自增,局部变量表中i的值就变为4
⑤把操作数栈中前两个数弹出,执行乘积操作,3*3=9,那么把9压到操作数栈中,此时栈中有两个元素,[2,9](右边为栈顶)
⑥把操作数栈中前两个数弹出,执行加法操作,9+2=11
⑦此时等式右边已经计算完成,赋值给k,所以k=11

因此答案为

i=4
j=1
k=11

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值