java基础面试题之:i++与++i的区别
Posted wowotou-lin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础面试题之:i++与++i的区别相关的知识,希望对你有一定的参考价值。
源代码
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的区别的主要内容,如果未能解决你的问题,请参考以下文章
Java核心面试宝典Day5盘点常见基础面试题之“方法与递归”