16.控制转移指令(条件跳转指令、比较条件跳转指令、多条件分支跳转指令、无条件跳转指令)

本文详细介绍了JVM中的控制转移指令,包括条件跳转、比较条件跳转、多条件分支跳转及无条件跳转指令。通过实例解析了不同指令的应用场景与执行流程。

1.控制转移指令

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

1.1 条件跳转指令

  1. 条件跳转指令一般和比较指令结合使用。在条件跳转指令执行前,一般先用比较指令进行栈顶元素的准备,然后进行条件跳转。
  2. 条件跳转指令:弹出栈顶元素,测试它是否满足某一条件,如果满足,则跳转到指定位置。
  3. 如下图表中所示,是条件跳转指令包括的指令。
    在这里插入图片描述
  4. 注意:
    a) byteshortcharboolean都会转换成int类型的指令完成。
    b) 对于longfloatdouble类型的条件分支比较操作,会先执行相应类型的比较运算指令,返回一个整型值到操作数栈中,然后再使用int类型的条件跳转指令完成分支跳转。
    在这里插入图片描述

例子:

  1. ifeq
    在这里插入图片描述
  2. ifnonnull
    在这里插入图片描述
  3. 比较指令与跳转指令混合使用例子
    在这里插入图片描述
  4. 存在类型提升的情况
    在这里插入图片描述

1.2 比较条件跳转指令

  1. 比较条件跳转指令是比较指令和跳转指令的结合体,它将比较和跳转两个步骤合二为一。
  2. 将栈顶的两个元素弹出,进行比较,如果比较的结果满足条件,则进行跳转。
    在这里插入图片描述
    例子1
    在这里插入图片描述
    例子2
    在这里插入图片描述

1.3 多条件分支跳转指令

  1. 多条件分支跳转指令是专为switch-case语句设计的,主要有tableswitchlookupswitch两种。
  2. tableswitchlookupswitch的区别在于,tableswitch要求多个条件的分支值是连续的,查找效率更高(不需要搜索全部的case值,可以通过简单的计算直接定位);lookupswitch要求多个条件的分支的值不是连续的,查找效率更低(每次查找都需要搜索全部的case值)。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    tableswitch例子:
    在这里插入图片描述
    lookupswitch例子:
    在这里插入图片描述
    JDK7支持string类型的switch语句:
    需要注意的是,在将传入的参数与case值进行比较的时候,先比较的是两者的hash值是不是相等的,如果相等后面还会调用字符串的equals方法进行比较,如果不相等,则与lookupswitch中的下一个hash值进行比较。
    在这里插入图片描述

1.4 无条件跳转指令

  1. 目前主要的无条件跳转指令就是goto
    在这里插入图片描述
    例子:
    在这里插入图片描述

更多JVM文章请访问我的JVM专栏:
https://blog.csdn.net/u011069294/category_10113093.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值