Java基础知识复习01:算术运算符++


前言

虚怀若谷,大智若愚。温故而知新,本文介绍Java基础中的i++相关知识。

提示:以下是本篇文章正文内容,下面案例可供参考

一、++是什么?

++是算术运算符中的一种,++运算包含前置运算和后置运算两种变化,前置运算需要把运算符放置在操作数前,规则是先运算,再使用操作数变量值,就是我们常说的++i。后置原酸需要把运算符放置在操作数后,规则是先使用操作数变量值,再进行自增,也就是我们常说的i++

二、用法

1.简单题目分析

public static void main(String[] args){
        int i = 0;
        System.out.println(i++);
        System.out.println(++i);
    }

相信大家可以很快说出两次输出的结果分别为0,2。
执行完以;号结尾的语句System.out.println(i++);后再进行+1,所以第一次输出时i仍然为0,当执行第二句输出时i的值已经为1,此时++1为先进行+1,再执行;号结尾的语句System.out.println(++i);,所以第二次输出为2。


这种思路理论上好像可行,但很遗憾地说,这种理解是错的。原因很简单,我们把第二句输出System.out.println(++i);去掉再执行上述代码块就很容易证实。

2.复杂题目分析

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++的用法产生了怀疑,其实书本上的定义说的并没有错,只是我们没有深入了解,所以并不能正确理解,接下来我们一起再用另一种方式理解。

2.用法原理分析

其实对于++,我们需要结合Java内存才能准确无误的理解其用法。首先,我们先引入两个概念:操作数栈局部变量表。操作数栈用来存放操作数i,局部变量表用来声明和存放变量i、j、k,i++的运算过程是先将操作数i压栈,然后再让局部变量表中i的值进行自增,最后再将操作数i弹栈,赋值给局部变量表。++i的运算过程是先让局部变量表中i的值进行自增,其次再将操作数i压栈,等赋值类运算符=右边的运算结束后,再将操作数弹栈赋值给局部变量表。
当我们消化完这个概念后,下面让我们结合代码逐步分析:

int i = 1;
在局部变量表中声明i变量,并初始化值为1

i = i ++;
首先将操作数i=1压栈,其次赋值运算符右边局部变量表i自增变为2,接着赋值运算符右边运算结束,操作数栈弹栈i=1赋值给局部变量表i,注意,此时i仍为1

int j = i ++;
首先局部变量表标识j变量,其次操作数i=1压栈,接着赋值运算符右边局部变量表i自增变为2,最后操作数栈弹栈i=1赋值给局部变量表j,此时j为1,i为2

int k = i ++ + i * i ++;
首先局部变量表标识k变量,其次a.操作数i=2压栈,接着赋值运算符右边局部变量表i自增变为3,右边运算中i ++部分结束,紧接着b.计算i * i++。注意,此时还未运算完,但局部变量表中i的值已经为3。当i * i ++ = 3 * 3 = 9计算完后,局部变量表i再次自增,此时i=4。然后c.右边运算表达式结果2 + 3 * 3 = 11压栈,赋值类运算符=右边运算全部结束,最后d.操作数栈弹栈赋值给局部变量表k,e.后续再无算术运算,操作数栈弹栈赋值i=4,此时为k为11,i为4

最后输出结果分别为:4,1,11


总结

以上就是今天要讲的内容,本文仅仅简单介绍了结合操作数栈和局部变量表来分析算术运算符++的使用,希望能把拙见分享给各位正在学习的伙伴,不足或有误之处,欢迎评论纠正,谢谢!
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒鼬工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值