1.控制转移指令
- 控制转移指令分为如下图所示的5种,其中比较指令在算术指令中描述过。

1.1 条件跳转指令
- 条件跳转指令一般和比较指令结合使用。在条件跳转指令执行前,一般先用比较指令进行栈顶元素的准备,然后进行条件跳转。
- 条件跳转指令:弹出栈顶元素,测试它是否满足某一条件,如果满足,则跳转到指定位置。
- 如下图表中所示,是条件跳转指令包括的指令。

- 注意:
a)byte、short、char、boolean都会转换成int类型的指令完成。
b) 对于long、float、double类型的条件分支比较操作,会先执行相应类型的比较运算指令,返回一个整型值到操作数栈中,然后再使用int类型的条件跳转指令完成分支跳转。

例子:
ifeq

ifnonnull

- 比较指令与跳转指令混合使用例子

- 存在类型提升的情况

1.2 比较条件跳转指令
- 比较条件跳转指令是比较指令和跳转指令的结合体,它将比较和跳转两个步骤合二为一。
- 将栈顶的两个元素弹出,进行比较,如果比较的结果满足条件,则进行跳转。

例子1:

例子2:

1.3 多条件分支跳转指令
- 多条件分支跳转指令是专为
switch-case语句设计的,主要有tableswitch和lookupswitch两种。 tableswitch和lookupswitch的区别在于,tableswitch要求多个条件的分支值是连续的,查找效率更高(不需要搜索全部的case值,可以通过简单的计算直接定位);lookupswitch要求多个条件的分支的值不是连续的,查找效率更低(每次查找都需要搜索全部的case值)。



tableswitch例子:

lookupswitch例子:

JDK7支持string类型的switch语句:
需要注意的是,在将传入的参数与case值进行比较的时候,先比较的是两者的hash值是不是相等的,如果相等后面还会调用字符串的equals方法进行比较,如果不相等,则与lookupswitch中的下一个hash值进行比较。

1.4 无条件跳转指令
- 目前主要的无条件跳转指令就是
goto。

例子:

更多JVM文章请访问我的JVM专栏:
https://blog.csdn.net/u011069294/category_10113093.html
本文详细介绍了JVM中的控制转移指令,包括条件跳转、比较条件跳转、多条件分支跳转及无条件跳转指令。通过实例解析了不同指令的应用场景与执行流程。
&spm=1001.2101.3001.5002&articleId=112193675&d=1&t=3&u=649c0dd37992468a9e0a203580d0e437)
3343

被折叠的 条评论
为什么被折叠?



