站在字节码的角度认识前++和后++

前文

我们在使用前++和后++时,有时候输出的结果和我们预想的不太一样,本文我们一起站在字节码的角度去看看前++和后++在底层是怎么运行的。话不多说,上图!上代码!

未运算之前的前++和后++

创建一个类,声明一个测试方法method1,在方法体内声明一个局部变量,进行一个后++操作

public class ArithmeticTest {
    public void method1(){
        int i = 10;
        i++;
//        ++i;
    }
}

上述method()1方法的的字节码指令

下面来图解一下上图的字节码指令
在这里插入图片描述
无论是前++还是后++在未运算之前字节码都是一样的,这里大家可以自己试试,我就不做描述了。

运算之后的前++和后++

方法体中声明两个局部变量i进行后++操作,j进行前++操作,然后再各自新建一个局部变量接收++运算后的值

  public void method2(){
        int i = 10; //i=11
        int a = i++; //a=10

        int j = 20; //j=21
        int b = ++j; //b=21
    }

上述method()2方法的字节码指令
在这里插入图片描述
先看运算后 后++(bipush 10至istore_2)的字节码指令图解
在这里插入图片描述
再看运算后前++(bipush 20至istore_4)的字节码指令图解
在这里插入图片描述

为什么后++之后还是原来的值?

见下述的代码,在方法体中声明了一个局部变量i并赋值为10,然后将i进行后++ 再用i接收。

  public void method3(){
        int i = 10;
        i = i++;
        System.out.println(i);//10
    }

上述代码打印出的结果竟然还是10,这个看代码层面是看不出它的端倪的,下面看看字节码层面是怎么做的,
在这里插入图片描述

以上就是本文的全部内容,希望对大家的学习有所帮助,本文为博主原创文章。转载请附上原文出处链接。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值