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;从虚拟机角度解答的主要内容,如果未能解决你的问题,请参考以下文章

i=i++; i=++i;从虚拟机角度解答

i=i++; i=++i;从虚拟机角度解答

i=i++; i=++i;从虚拟机角度解答

java字节码角度图解 i++ 和 ++i

下载下来的centos-6.5-i386-bin-DVD1.iso压缩包该怎么安装,我是要在虚拟机上安装

从任何角度来看 ++i 和 i+=1 有啥区别