java基础 ——关于i++的问题

先看一道题:

写出下面代码的执行结果:

public static void main(Stringl] 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);
}

很不幸,这题我做错了。。

4,1,11

最终输出结果如上。

分析如下:

首先要知道几个概念:

操作数栈

局部变量表

赋值操作规则

等号左边的i 在局部变量表里,等号右边的i++ 结果 是存放在操作数栈内

i=i++;

1、= 是最后计算的,右边的操作是要压入操作数栈的。

1,左边变量表i=1, 右边 i=1,先将1压入操作数栈

2、自增操作 :左边的变量 自增,变成了2,但是右边 操作数栈内的 值 仍然为1

3、赋值,右边操作数栈的内容,覆盖了 左边的局部变量i (i=2) ,此时,左边的i 再 次变成1;

int j=i++;

2、由于 i 的结果是1,压入操作数栈,所以,j =1,此时 i 又进行了自增(在 i 的 局部变量表中)

int k=i+ ++i *i++;

3、i =2 压入操作数栈,先算等号右边(等号右边的压栈顺序是从左到右的),最后 再赋值

1)i=2 压栈

2)++i ,i 自增 i=3,压入操作数栈

2)3*3=9 压入操作数栈

3) i++ 自增 ,i=4,更新 int i 局部变量表

4)2+9 =11 压入操作数栈

5)执行赋值操作,k=11

本题关键点:

1、操作数栈

2、先算等号右边 最后再赋值

3、等号右边的从左到右依次压栈

4、自加运算 是不进入操作数栈的,直接在局部变量表里操作。

4、具体怎么计算,依据运算符优先级

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值