先码后看 为什么i=i++后i的值不变?很有意思 侵立删

本文详细解析了Java字节码中的iinc指令行为,并通过一个具体示例展示了iinc指令如何进行局部变量自增操作而不将其结果压入操作数栈,从而解释了为何在打印时变量的值仍为初始值。

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

链接:https://www.zhihu.com/question/22448065/answer/31719259
环境JDK1.6编译结果:

public static void main(java.lang.String[] arg0);
     0  iconst_1
 //常量int类型1入栈
     1  istore_1
 //弹出栈顶元素(常量int 1)存入位置为1的局部变量(i)中,即i=1
     2  iload_1
 //从位置为1的局部变量中取出元素压入栈,数值为1
     3  iinc 1 1
 //局部变量位置为1的元素自增1,i=2,未入栈,栈顶元素不变
     6  istore_1
 //弹出栈顶元素(常量int 1)存入位置为1的局部变量(i)中,即i=1
     7  getstatic java.lang.System.out : java.io.PrintStream [2]
    10  iload_1
 //从位置为1的局部变量中取出元素压入栈,所以数值还是为1
    11  invokevirtual java.io.PrintStream.println(int) : void [3]
    14  return
      Line numbers:
        [pc: 0, line: 3]
        [pc: 2, line: 4]
        [pc: 7, line: 5]
        [pc: 14, line: 6]
}

简单来说,就是iinc这个指令没有将值push,所以pop的时候还是原来的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值