Java i=i++值的问题的解答 反编译

本文详细解析了Java中i++运算的具体过程及结果,通过分析JVM指令解释了为何i=i++会使得i的值保持不变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天有朋友问我这样的一个问题。

 
 
  1.  /** 
  2. * @author lihzh 
  3. * @date 2012-6-8 下午9:21:22 
  4. * @blog http://www.coderli.com 
  5. */ 
  6. ublic static void main(String[] args) { 
  7. int i = 0
  8. i = i++; 
  9. System.out.println(i); 

 打印的结果为什么是 0。

其实笔者一下也说不清楚,第一反应就是看看编译后的class文件。
 
 
 
  1. public static void main(java.lang.String[] args); 
  2.     0  iconst_0 
  3.     1  istore_1 [i] 
  4.     2  iload_1 [i] 
  5.     3  iinc 1 1 [i] 
  6.     6  istore_1 [i] 
  7.     7  getstatic java.lang.System.out : java.io.PrintStream [16

这就好解释了,查了一下,解释如下:

iconst_0,将int值0压入操作数栈 
istore_1,将栈顶的0弹出,赋给局部变量区1号索引的局部变量i 
至此完成int i = 0 
 
iload_1,将局部变量区1号索引的变量i值0压入操作数栈 
iinc 1 1,将局部变量区1号索引的值加1,操作数栈不发生变化 
istore_1,将栈顶的0弹出,赋给局部变量区1号索引的i 
至此完成i = i++,所以最后i的值为0 
 
 
iinc 指令是直接对局部变量区进行操作,操作数栈不发生任何变化,这是由JVM规范定义的。
 
本文出自 OneCoder个人博客,转载请务必注明此链接: http://www.coderli.com/archives/java-i-jvm

     本文转自mushiqianmeng 51CTO博客,原文链接:http://blog.51cto.com/mushiqianmeng/929609,如需转载请自行联系原作者




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值