【JVM】字节码技术:手撕 i++ 执行过程

一、原始java代码

package cn.itcast.jvm.t3.bytecode;

/**
* 从字节码角度分析 a++ 相关题目
*/
public class Demo3_2 {
	public static void main(String[] args) {
		int a = 10;
		int b = a++ + ++a + a--;
		System.out.println(a);
		System.out.println(b);
	}
}

二、编译后的字节码文件

public static void main(java.lang.String[]);
	descriptor: ([Ljava/lang/String;)V
	flags: (0x0009) ACC_PUBLIC, ACC_STATIC
	Code:
		stack=2, locals=3, args_size=1
			0: bipush 10
			2: istore_1
			3: iload_1
			4: iinc 1, 1
			7: iinc 1, 1
			10: iload_1
			11: iadd
			12: iload_1
			13: iinc 1, -1
			16: iadd
			17: istore_2
			18: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
			21: iload_1
			22: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
			25: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
			28: iload_2
			29: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
			32: return
		LineNumberTable:
			line 8: 0
			line 9: 3
			line 10: 18
			line 11: 25
			line 12: 32
		LocalVariableTable:
			Start 		Length 		Slot 	Name 	Signature
				0 			33 		   0 	args 	[Ljava/lang/String;
				3 			30 		   1 	   a 	I
				18 			15 		   2 	   b 	I

三、注意

注意:iinc 指令是直接在局部变量表 slot 上进行运算

a++ :先 iload 到操作数栈,再执行 iinc

++a :先 iinc ,再 iload 到操作数栈

四、解析

4.1 int a=10;

1)bipush

在这里插入图片描述

2)istore 1

在这里插入图片描述

4.2 a++

3)iload 1

在这里插入图片描述

4)iinc 1,1

在这里插入图片描述

4.3 ++a

5)iinc 1,1

在这里插入图片描述

6)iload 1

在这里插入图片描述

4.4 a++ + ++a

7)iadd

在这里插入图片描述

4.5 a–

8)iload 1

在这里插入图片描述

9)iinc 1,-1

在这里插入图片描述

4.6 int b=a++ + ++a + a–

10)iadd

在这里插入图片描述

11)istore 2

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿你满腹经纶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值