码迷,mamicode.com
首页 > 编程语言 > 详细

java基础面试题之:i++与++i的区别

时间:2019-08-14 16:52:26      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:推送   variant   ace   excel   现在   color   white   一个   icon   

源代码

  int i = 0;

i = i++;

System.out.println(i);

 

int j=5;

j=++j;

System.out.println(j);

 

反编译:

 

i++内存表现:

Code:

 

       0: iconst_0

       1: istore_1

       2: iload_1

       3: iinc          1, 1

       6: istore_1

++i的内存表现:

Code:

      14: iconst_5

      15: istore_2

      16: iinc          2, 1

      19: iload_2

      20: istore_2

 

我用excel对比了一下:

 

技术图片

区别很明显了:

i++在本地变量加了1之后,直接将栈顶数值推送到了本地变量,覆盖了+1的操作,所以i++缺少了一个将本地变量推送到栈顶的步骤

++i是本地变量加1,再将本地变量推送到栈顶,再由栈顶推送到本地变量,完美的完成了增加操作

留下一个疑惑:

 int i = 0; i = i++ + i++;

System.out.print(i) ;

打印结果是1,看了反编译结果,i++之后有一次将本地变量值推入栈顶的操作,第二次i++无效

现在的问题是不知道jvm更深入的操作机制,也就是说不了解在什么情况下会触发本地变量值推入栈顶的操作。待以后解决。

 

java基础面试题之:i++与++i的区别

标签:推送   variant   ace   excel   现在   color   white   一个   icon   

原文地址:https://www.cnblogs.com/wowotou-lin/p/11352740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!