为了账号安全,请及时绑定邮箱和手机立即绑定

Java i++ 和 ++i 区别

标签:
Java

源码

      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人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消