首页 > 其他 > 详细

自增变量

时间:2019-04-26 18:20:55      阅读:102      评论:0      收藏:0      [点我收藏+]

    先来看看下面的代码:

  1. public class test {  
  2.     public static void main(String[] args) {  
  3.         int i = 1;  
  4.         i = i++;  
  5.         int j = i++;  
  6.         int k = i + ++i * i++;  
  7.         System.out.println(i);  
  8.         System.out.println(j);  
  9.         System.out.println(k);  
  10.     }  

技术分享图片

 

先来分析第4行:

    这是经典题目i=i++;,可以扯出Java的特性

    首先先算等号右边,i++,然后由于i++是先用后加,当然看似先用后加,其实虚拟机是先把这个操作数做一个备份,然后再原数上加,赋值时候把这个备份赋值出去,所以我们执行如下操作:

  技术分享图片

 

  1. 把i值压入操作数栈,因为运算过程是要在操作数栈中进行

    技术分享图片

     

  2. i变量自增,局部变量表中的i变成2

    技术分享图片

     

  3. 我们刚刚算的是整个右边的结果2,然后把备份赋值出去

     

    因此i=i++;这句话结果是i没有自增。技术分享图片

     

接下来分析第5行:

    这时候还备份时,还给的是j所以i自增的值被保留下来了

 技术分享图片

 

接下来看第6行:

  1. 把i的值压入操作数栈
  2. 后面一个++i,i变量自增1,变成3
  3. 执行完后的得数都会被压入操作数栈【局部量表:3 操作数栈:3/2】
  4. i++ 把i的值压入操作数栈【局部量表:3 操作数栈:3/3/2】
  5. i变量自增 【局部量表:4 操作数栈:3/3/2】
  6. 把操作数栈中前两个弹出求乘积结果再压入栈【局部量表:4 操作数栈:9/2】
  7. 把操作数中的值弹出求和赋值求和给k【局部量表:4 操作数栈:空】

大家可以仿造我们初学栈时老师给的表达式求值的算法题,来模拟上述过程。

 

技术分享图片

 

自增变量

原文:https://www.cnblogs.com/figsprite/p/10775838.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!