java i++和 ++i

这篇博客探讨了Java字节码如何转换为汇编语言,通过`i++`和`++i`两个示例详细解析了它们在汇编层面的差异。内容涉及局部变量表、操作数栈以及Java虚拟机指令,揭示了预增量和后增量操作在执行流程上的不同。
摘要由CSDN通过智能技术生成
cmd class 转 汇编语言
D:\jd\work-jd\interview\target\classes\com\interview\demo\test>javap -v AddAdd.class > AddAdd.txt 
 // 把class 转成 汇编 代码

D:\jd\work-jd\interview\target\classes\com\interview\demo\test>dir 
// 查看当前 目录下的文件

D:\jd\work-jd\interview\target\classes\com\interview\demo\test>type AddAdd.txt
// 查看 AddAdd.txt 文件内容
 i++
// i++ 汇编语言
//         0: iconst_1               //将int类型的1压入栈
//         1: istore_1               //出栈一个变量放入局部变量表中下标为1的位置,下标为0的位置存放的是this指针,此时栈为空,
//         2: iload_1                //从局部变量表中取出下标为1(实际值此处为1)的变量压入操作数栈中
//         3: iinc          1, 1     //将局部变量表中下标为1的变量进行加1操作
//         6: istore_2               //出栈一个变量放入局部变量表中下标为2的位置,这一步没有对操作栈中的数进行操作,直接出栈到变量表中
//         7: getstatic     #6       //去常量池中引用"#6"符号引用的类与方法                 // Field java/lang/System.out:Ljava/io/PrintStream;
//         10: iload_2               //从局部变量表中取出下标为1(实际值此处为1)的变量压入操作数栈中
//         11: invokevirtual #7      //执行println方法               // Method java/io/PrintStream.println:(I)V
//         14: return


1:入线程栈 10      
2:入局部变量栈 10  
3:从局部变量取出10 压入 操作栈 
4:在操作栈中执行 ++  
5:入局部变量栈
 ++i
// ++i 汇编语言
//         0: iconst_1            //将int类型的1压入栈
//         1: istore_1            //出栈一个变量放入局部变量表中下标为1的位置,下标为0的位置存放的是this指针,此时栈为空,
//         2: iinc          1, 1    //将局部变量表中下标为1的变量进行加1操作
//         5: iload_1                //从局部变量表中取出下标为1(实际值此处为2)的变量压入操作数栈中
//         6: istore_2            //出栈一个变量放入局部变量表中下标为2的位置,(实际值此处为2)
//         7: getstatic     #6    //去常量池中引用"#6"符号引用的类与方法               // Field java/lang/System.out:Ljava/io/PrintStream;
//         10: iload_2                //从局部变量表中取出下标为1(实际值此处为2)的变量压入操作数栈中
//         11: invokevirtual #7    //执行println方法                 // Method java/io/PrintStream.println:(I)V
//         14: return
1:入栈 10      
2:入局部变量栈 10  
3:操作局部变量栈的10 ++  
4:从局部变量栈中取出压入操作栈
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值