手记

Java i++ 和 ++i 区别

源码

      int k = 1;
      int j = 1;
      int i = 1;
      System.out.println(i++);
      System.out.println(++i);

字节码

   L0
    LINENUMBER 8 L0
    ICONST_1
    ISTORE 1
   L1
    LINENUMBER 9 L1
    ICONST_1
    ISTORE 2
   L2
    LINENUMBER 10 L2
    ICONST_1
    ISTORE 3
   L3
    LINENUMBER 11 L3
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    ILOAD 3
    IINC 3 1
    INVOKEVIRTUAL java/io/PrintStream.println (I)V
   L4
    LINENUMBER 12 L4
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    IINC 3 1
    ILOAD 3
    INVOKEVIRTUAL java/io/PrintStream.println (I)V

说明:
反编译采用ASM插件
内容截取自以上字节码 !!!
#号后面的内容是注释 !!!

L0
    # 源码行号
    LINENUMBER 8 L0
    # ICONST_1:将一个(int类型)常量加载到操作数栈
    ICONST_1
    # ISTORE:将一个数值从操作数栈存储到局部变量表
    ISTORE 1

L3
    # 源码行号
    LINENUMBER 11 L3
    # GETSTATIC:获取静态字段的值 (访问类字段和实例字段的指令)
    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
    # ILOAD:将一个指定(int类型)局部变量加载到操作栈
    ILOAD 3
    # IINC:局部变量自增指令
    IINC 3 1
    # INVOKEVIRTUAL:用于调用对象的实例方法 (运行时方法绑定调用方法)
    INVOKEVIRTUAL java/io/PrintStream.println (I)V
1人推荐
随时随地看视频
慕课网APP