i=i++操作值会不会让i发生改变,反汇编解释

今天看到一个有趣的现象,在程序中编程

Int i=0;
i=i++;
system.out.println(i);

输出结果为0

这是为什么呢,为此我查询了一些资料
首先我们反编译一下class文件 (汇编操作javap –c 类名)
在这里插入图片描述
我们了解一下反汇编的基础指令

一、入栈操作:Const、bipush、sipush
上述只用到了const指令
Const的作用就是将常量压入栈中。
二、出栈操作:store
就是将栈顶元素出栈赋值给一个局部变量
三、压栈操作:iload
就是将局部变量代表的数据压入栈中。
四、自增长操作:iinc
就是对给定的局部变量做自增操作。(特别注意,这条指令是少数执行过程中完全不修改数栈的指令,他接受两个参数,第一个是局部变量的引用位置以及累加数)

现在我们重新来解释一下反编译的代码
在这里插入图片描述
0: iconst_0
将常量0压入栈中
1: istore_1
将0出栈赋值为i变量
2: iload_1
重新将i的值0入栈
3: iinc 1, 1
进行自增长操作
6: istore_1
将栈顶的元素出栈赋值给i
所以这一系列操作,得到的还是i=0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值