29-从字节码角度分析i = i++ 和 i = ++i

内容分享2个月前发布
1 0 0
全能 AI 聚合平台 免费

一站式接入主流 AI 大模型,支持对话 · 生图 · 生视频,即开即用

ChatGPT Claude Gemini Grok DeepSeek 通义千问 Ollama
AI对话 AI生图 AI视频
免费使用 →

一、分析i = i++

  • 代码

    public void method9() {
        int i = 10;
        i = i++;
    }

  • 字节码

0 bipush 10
2 istore_1
3 iload_1
4 iinc 1 by 1
7 istore_1
8 return

  • 字节码分析
  • 0 bipush 10:将常量10加载到操作数栈

    29-从字节码角度分析i = i++ 和 i = ++i

  • 2 istore_1:将操作数栈顶数据存储到局部变量表下标为1的位置上

    29-从字节码角度分析i = i++ 和 i = ++i

  • 3 iload_1:将局部变量表下标为1中的数据加载到操作数栈中

    29-从字节码角度分析i = i++ 和 i = ++i

  • 4 iinc 1 by 1:将局部变量表下标为1中的数据+1

    29-从字节码角度分析i = i++ 和 i = ++i

  • 7 istore_1:将操作数栈中栈顶数据存储到局部变量表中下标为1的位置上

    29-从字节码角度分析i = i++ 和 i = ++i

  • 小结
    • 1、i的值依然是10
    • 2、i的值有那么一刻为11

二、分析i = ++i

  • 代码

    public void method10() {
        int i = 10;
        i = ++i;
    }

  • 字节码

0 bipush 10
2 istore_1
3 iinc 1 by 1
6 iload_1
7 istore_1
8 return

  • 0 bipush 10:将常量10加载到操作数栈中

    29-从字节码角度分析i = i++ 和 i = ++i

  • 2 istore_1:将操作栈栈顶数据存储到局部变量表中下标为1的位置中

    29-从字节码角度分析i = i++ 和 i = ++i

  • 3 iinc 1 by 1:将局部变量表中下标为1的数据+1

    29-从字节码角度分析i = i++ 和 i = ++i

  • 6 iload_1:将局部变量表下标为1中的数据加载到操作数栈中

    29-从字节码角度分析i = i++ 和 i = ++i

  • 7 istore_1:将操作数栈中栈顶数据存储到局部变量表下标为1的位置上

    29-从字节码角度分析i = i++ 和 i = ++i

  • 小结

    • i的值为11
© 版权声明

相关文章

暂无评论

none
暂无评论...