java的变量累加_弄懂Java的自增变量

首先我们来看一段代码:

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 = a + b * c,我们设i = 0 , a为1,b为2,c为3。

在进行运行时,左边的i是保存在局部变量中,也就是保存在栈中;而右边的计算是在操作数栈中进行计算的。

7492ab69dbb031f41d8a72065595e371.png

在进行右边操作数栈计算完毕后,会将结果赋值给左边对应的局部变量。

f8f1b56452729f8318d831feb6c01878.png

第一步

在进行i = i ++进行计算时,会将左边的放进局部变量,右边的i++放进操作数栈,然后进行计算。

b41cafb1a9ff9dc10af40a7e079210ed.png

此时计算i++,i++ 操作等于 i = i + 1,所以加1后赋值给局部变量,而操作数栈仍未1。

1d161d2e11309540ad2964221525e20e.png

将操作数栈的1赋值给局部变量,所以这一步计算完之后结果仍未1。

983627c8d4de8b4747da22382f13a312.png

第二步

​此时局部变量中i的值为1 ,现将i放进操作数栈,然后计算i++。

2dfb13eda8f1d3706863bc32f8d2bdb3.png

计算完i++之后,局部变量中的i为2,操作数栈的结果为1。

5a4329f0eba3442e554193ddd71e2e76.png

然后将操作数栈中的值赋值给j。

4398c8e1370ea3ed894979a329e25f5f.png

第三步

在进行计算之前,i的值为2,j的值为1。

右边的三个数字分别要压入操作数栈,分别是i ,++i,i++。

i直接放入是2;++i要进行计算,计算后局部变量中的i是3,因为是++i,所以放入的也是3;i++先放入3,然后计算i++,此时局部变量表中i的值为4。

66ac489ad909cf4dd498bec5229c33f1.png

将前一步操作数栈的值计算完之后放入k中即可。

f6e47866aa8cb98fb0f92b3f53e8e684.png

总结

赋值=,最后计算

=右边的从左到右加载值依次压入操作数栈

实际先算哪个,看运算符优先级

自增、自减操作都是直接修改变量的值,不经过操作数栈

最后的赋值之前,临时结果也是存储在操作数栈中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值