i=i++; i=++i;从虚拟机角度解答
Posted 风泊月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了i=i++; i=++i;从虚拟机角度解答相关的知识,希望对你有一定的参考价值。
i=i++
public class MTest {
public static void main(String[] args) {
int m = 100;
m = m++;
}
}
//结果是 100
通过javap -c 命令查看字节码指令如下
javap -c Mtest.class
0: bipush 100 将常量池数据100压栈到 操作数栈
2: istore_1 弹出栈顶元素100 放到局部变量表下标为1 的位置
3: iload_1 将局部变量表下标为1的数据 放到操作数栈 操作数栈 栈顶元素为100
4:iinc 局部变量表数据自增1
7:弹出操作数栈顶元素赋值给m
8:结束
i=++i;
public class MTest {
public static void main(String[] args) {
int m = 100;
m = ++m;
//结果是101
}
}
通过javap命令查看字节码后
javap -c Mtest.class
0: bipush 100 将常量100 压到操作数栈
2: istore_1 将100弹栈放到局部变量表
3: iinc 局部变量表 自增1
6: iload_1 局部变量表下标为1的数据放一份到操作数栈 操作数栈顶值为101
7: istore_1 弹栈 赋值给m
8: return 结束操作
以上是关于i=i++; i=++i;从虚拟机角度解答的主要内容,如果未能解决你的问题,请参考以下文章