当前位置: 首页 > wzjs >正文

珠海建设局网站首页在线子域名二级域名查询工具

珠海建设局网站首页,在线子域名二级域名查询工具,企业网站哪个好,做网站哪家公司最好从字节码的角度看switch-case 从字节码的角度看switch-caseswitch-case语句基本语法从字节码的角度分析switch-case语句tableswitch(表跳转) 字节码关键角度分析 从字节码的角度看switch-case switch-case语句是Java中处理条件判断的常用语法。但是如何…

从字节码的角度看switch-case

  • 从字节码的角度看switch-case
    • switch-case语句基本语法
    • 从字节码的角度分析switch-case语句
      • tableswitch(表跳转)
    • 字节码关键角度分析

从字节码的角度看switch-case

switch-case语句是Java中处理条件判断的常用语法。但是如何从底层字节码的角度看待switch-case语句?

switch-case语句基本语法

switch (expression) {case value1:// 当 expression 等于 value1 时执行的代码break; // 可选,防止继续执行下面的casecase value2:// 当 expression 等于 value2 时执行的代码break;// 可以有更多的 case 语句default:// 如果没有 case 匹配,则执行这里的代码
}

当我们的条件比较多的时候,我们一般就不采用if-else的判断方式来进行判断了。因为这样写的话会嵌套很多if-else,导致代码可读性大大降低。

从字节码的角度分析switch-case语句

虽然Java的语法,switch-case语句是用来处理条件判断的。但是底层字节码是如何实现的呢?Java编译器会根据case值的分布情况,生成两种不同的字节码指令:tableswitch(表跳转)和lookupswitch(查找跳转)。

tableswitch(表跳转)

  1. tableswitch
  • 适用场景:当case的值连续且密集(如 1, 2, 3)时使用。

  • 实现原理:

    • 生成一个索引表,直接通过偏移量跳转到目标代码块。

    • 执行效率高(时间复杂度 O(1)),但占用空间较大(需为所有可能的索引值分配表项)。

  • 字节码示例:

public static void main(String[] args) {int i = 2;switch (i) {case 1: System.out.println("one"); break;case 2: System.out.println("two"); break;case 3: System.out.println("three"); break;default: System.out.println("default");}
}

编译后字节码(javap -c):

0: iconst_2          // 加载常量2到操作数栈
1: istore_1          // 存储到局部变量i
2: iload_1           // 加载i的值
3: tableswitch {     // 使用tableswitch指令1: 28          // case 1 → 跳转到偏移282: 39          // case 2 → 跳转到偏移393: 50          // case 3 → 跳转到偏移50default: 61     // 默认跳转到偏移61}
  1. lookupswitch
  • 适用场景:当case的值稀疏不连续(如 1, 10, 100)时使用。

  • 实现原理:

    • 维护一个键值对列表,按顺序查找匹配的case。

    • 时间复杂度为 O(n)(n为case数量),但空间占用更小。

  • 字节码示例:

public static void main(String[] args) {int i = 10;switch (i) {case 1: System.out.println("one"); break;case 10: System.out.println("ten"); break;case 100: System.out.println("hundred"); break;default: System.out.println("default");}
}

编译后字节码:

0: bipush 10        // 加载常量10到操作数栈
2: istore_1          // 存储到局部变量i
3: iload_1           // 加载i的值
4: lookupswitch {    // 使用lookupswitch指令1: 28          // case 1 → 跳转到偏移2810: 39         // case 10 → 跳转到偏移39100: 50        // case 100 → 跳转到偏移50default: 61     // 默认跳转到偏移61}

字节码关键角度分析

  1. break的作用
  • 无break的fall-through:

    • 若省略break,字节码中不会生成goto指令,导致执行完当前case后继续执行下一个case的代码。
  • 示例:

switch (i) {case 1: System.out.println("one"); // 无breakcase 2: System.out.println("two"); break;
}
  1. default处理
  • 无论是否有显式的default,字节码中都会包含default分支。

  • 若无显式default,default分支指向switch结束后的代码(即跳过所有case)。

  1. 字符串的switch-case
    Java 7+支持字符串的switch,但其底层实现会转换为哈希码比较。实际编译时会被转换为基于hashCode()的整型switch,再通过equals()方法二次验证。
http://www.dtcms.com/wzjs/512127.html

相关文章:

  • asp网站可运行jsp吗宁德市人社局
  • 苹果CMS如何做视频网站电商培训学校
  • 只有虚拟主机可以做网站吗太原百度快速优化排名
  • 微网站怎么做培训心得体会2000字
  • 网站备案完成通知seo优化及推广如何运营
  • 免费做电子邀请涵的网站google免费入口
  • 温州网站建设制作设计公司公司做网页要多少钱
  • 门户网站的建设费用网站统计分析工具的主要功能
  • 手机便宜的网站建设如何让百度收录自己的网站
  • 购物网站建设报价表河北关键词排名推广
  • wordpress全站ajax企业qq多少钱一年
  • wordpress 家教主题seo关键词排名怎么优化
  • 英文网站建设企业网站友情链接交易平台
  • 服装网站建设项目维护与评价书吉林网站推广公司
  • 做网站项目需求分析是什么线上营销方案
  • 拖拽式wordpress建站网页搜索快捷键是什么
  • 做淘宝客网站需要多大空间潜江seo
  • dede模板蓝色大气简洁企业网站模板下载中国企业100强
  • 做视频网站采集需要多大的空间推广搜索引擎
  • 备案时网站关闭小红书推广引流软件
  • 成都怎样制作公司网站竞价推广营销
  • 专门 做鞋子团购的网站有哪些武汉seo建站
  • 自已做个网站怎么做百度怎么做推广和宣传
  • 百度推广建设网站是不是合发今日热点头条
  • 微信人生里面微网站怎么做山东东营网络seo
  • 买的服务器怎么做网站免费的建站平台
  • 网站建设方案打包在线外链发布工具
  • 濮阳做网站亚马逊关键词
  • 专业网页制作流程优化大师卸载不了
  • 免费的设计网站有哪些赣州seo推广