`
ZangXT
  • 浏览: 118036 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中对switch的处理

阅读更多

        switch是控制选择的一种方式,编译器生成代码时可以对这种结构进行特定的优化,从而产生效率比较高的代码。在java中,编译器根据分支的情况,分别产生tableswitch,lookupswitch两中情况,其中tableswitch适用于分支比较集中的情况,而lookupswitch适用与分支比较稀疏的情况。不过怎么算稀疏,怎么算集中就是编译器的决策问题了,这里不做深入的分析。

简单的找几个例子。

例一:

反汇编代码可以发现其跳转表的结构:

其中的 3:tableswitch{ //0 to 14
0: 76;
1: 87;
2: 153;
3: 98;
4: 153;
5: 109;
6: 153;
7: 153;
8: 153;
9: 153;
10: 120;
11: 153;
12: 153;
13: 131;
14: 142;
default: 153 }
就是跳转表,对于tableswitch指令,这里high为14,low为0,表中共有high-low+1个分支项,当jvm遇到tableswitch指令时,它会检测switch(key)中的key值是否在low~high之间,如果不是,直接执行default部分,如果在这个范围之内,它使用key-low这个项指定的地点跳转。可见,tableswitch的效率是非常高的。

例二:

反汇编代码:

这里使用的是lookupswitch:

3:lookupswitch{ //4
3: 44;
20: 55;
50: 66;
100: 77;
default: 85 }
这种情况下,必须依次检测每一个项目看是否和switch(key) 中的key匹配,如果遇到匹配的直接跳转,如果遇到比key值大的,执行default,因为3,20,50,100这些项目是按照升序排列的,所以遇到比 key值大的case值后就可以确定后面没有符合条件的值了。另外一点,升序排列也允许jvm实现这条指令时进行优化,比如采用二分搜索的方式取代线性扫描等。

最后,记住jvm规范中的几句话:

  Compilation of switch statements uses the tableswitch and lookupswitch instructions. The tableswitch instruction is used when the cases of the switch can be efficiently represented as indices into a table of target offsets. The default target of the switch is used if the value of the expression of the switch falls outside the range of valid indices.

  Where the cases of the switch are sparse, the table representation of the tableswitch instruction becomes inefficient in terms of space. The lookupswitch instruction may be used instead.

  The Java virtual machine specifies that the table of the lookupswitch instruction must be sorted by key so that implementations may use searches more efficient than a linear scan. Even so, the lookupswitch instruction must search its keys for a match rather than simply perform a bounds check and index into a table like tableswitch. Thus, a tableswitch instruction is probably more efficient than a lookupswitch where space considerations permit a choice.

分享到:
评论
1 楼 wkbulletin 2009-09-17  

相关推荐

    switch语句在java和c#中的区别

    在 Java 和 C# 中,`switch` 语句在语法和行为上有一些显著的区别,尤其是在处理多条 `case` 的连续执行和 `break` 的使用上。 首先,我们来看 C# 中的 `switch` 语句示例: ```csharp class StudentGrade { ...

    Java中的Switch语句

    总结,Java中的`switch`语句为程序员提供了处理多分支逻辑的有效工具,通过合理使用它可以提高代码的可读性和可维护性。在实际开发中,应根据具体情况灵活运用,并注意保持代码的简洁性和清晰度。

    Java-Java Switch语句详解教程

    4. **优化**:由于Java编译器对Switch语句进行了优化,因此在某些情况下,使用Switch比使用if...else if...else可能更高效。 在学习和使用Java Switch语句时,应注意以下几点: - 确保`expression`的值与case标签的...

    bat.rar_bat java_java bat_switch network java

    标题中的"bat.rar_bat java_java bat_switch network java"表明这是一个与Windows操作系统中批处理(BAT)脚本和Java编程语言相关的项目,主要用于网络环境下的IP地址切换。这个工具利用了批处理脚本的便捷性和Java...

    在java switch中使用String作为分支条件

    在Java中,`switch`语句最初只能处理`int`、`char`以及`enum`类型的数据。然而,在实际开发过程中,有时需要根据字符串(`String`)来执行不同的逻辑分支。为了解决这一问题,Java 7引入了一个新特性——支持直接在`...

    Java中switch语句的注意事项.pdf

    总的来说,Java中的switch语句提供了灵活的多路径控制流,但需要注意其对数据类型的限制,以及如何有效地使用case、default和break来确保代码的正确性。在编写switch语句时,合理地组织和规划各个case,可以显著提高...

    java中switch的使用及语法说明

    ### Java中switch的使用及语法说明 在Java编程语言中,`switch`语句是一种非常有用的控制结构,它允许程序基于一个表达式的值来选择执行不同的代码块。这对于需要根据不同条件执行不同操作的情况非常有用,尤其是在...

    Java中switch实例.pdf

    总结来说,`switch`语句是Java中处理多分支逻辑的重要工具,尤其在处理枚举类型和固定值判断时,它提供了简洁且易于阅读的代码。理解并熟练运用`switch`语句,能够帮助开发者编写出更加高效和维护友好的程序。

    JAVA程式-自动贩卖机SWITCH&CASE.doc

    从标题 "JAVA 程式-自动贩卖机 SWITCH&CASE" 中,我们可以看到这是一个 Java 程式设计的自动贩卖机系统,使用 SWITCH&CASE 语句来实现不同的选择逻辑控制。 描述解析 从描述 "JAVA 程式-自动贩卖机 SWITCH&CASE" ...

    Java中switch判断语句典型使用实例

    在Java编程语言中,`switch`语句是一种...总的来说,`switch`语句在Java中是一个强大的控制流工具,尤其适用于处理有限数量的互斥情况。在实际编程中,应根据需求选择最合适的判断结构,以确保代码的简洁性和可读性。

    java学习资料-switch基础介绍及具体使用方法

    Java中的switch语句是一种多路分支的选择流程控制结构,它提供了比if-else语句更为简洁的代码形式,尤其在处理多个等值判断时。在Java中,switch语句适用于处理int、short、byte和char类型的值,以及枚举类型(自...

    Java领域、switch函数详细解析,代码演示,作业帮助,问答咨询~

    ### Java中的Switch语句详解 #### 一、引言 在Java编程中,`switch`语句是一种非常有用的控制结构,它允许程序基于一个特定表达式的值来选择性地执行不同的代码块。相比于传统的`if-else`结构,`switch`语句提供了...

    Java Switch对各类型支持实现原理

    总的来说,Java `switch`语句对不同类型的支持是通过类型转换、哈希码比较和对象引用比较等方式实现的,这些机制使得`switch`能够适应不同的数据类型,提供了更丰富的编程选择。在编写代码时,理解这些实现原理可以...

    第02章 Java编程基础 11 Switch分支语句

    3. **枚举和switch**:Java中的枚举类型可以直接在`switch`语句中使用,这是对其他类型的一个扩展,增加了代码的可读性。 4. **String的支持**:自Java 7开始,`switch`语句开始支持`String`类型,使得基于字符串的...

    JAVA字符串类型switch的底层原理详析

    JAVA字符串类型switch的底层原理详析是指在JAVA语言中,switch语句是如何处理字符串类型的表达式的。从表面上看,switch语句似乎可以直接处理字符串类型的表达式,但是实际上,JAVA虚拟机(JVM)是如何实现的呢? ...

    Java 实现简易教务管理系统的代码

    5. switch语句:系统中使用了switch语句来处理用户的选择,例如,switch(choice)。 6. 方法的调用:系统中使用了方法的调用来实现具体的功能,例如,operator.addStudents(students)和operator.displayStudents...

    switch选择结构

    在Java中,`switch`语句是一种高效且灵活的选择结构,尤其适用于处理多个可能的分支情况。本资料详细讲解了Java中的`switch`选择结构,通过PPT的形式为学习者提供了丰富的理解和实践指导。 `switch`语句的基本语法...

    java常用语句大全JAVA程式-自动贩卖机SWIJava程序设计报告TCH&CASE

    其中,`switch...case`语句在给定标题中特别提到,通常用于多选项的情况判断,例如游戏中的不同玩家选择。 - **异常处理**:`try...catch...finally`,用于处理程序运行过程中可能出现的异常情况,确保程序的健壮性...

    Head First Java 中文高清版pdf

    书中深入浅出地介绍了Java的基础语法,包括变量、数据类型、运算符、流程控制(如if语句、switch语句、循环结构)以及异常处理。这些基础知识是编写任何Java程序的基础,也是理解和解决问题的关键。 接着,书中的...

    java jdk api中文开发文档(免币)

    以上仅是Java JDK API中文开发文档中部分关键知识点的概述,实际文档中还涵盖了JDBC数据库连接、JavaFX图形用户界面、JavaMail邮件处理、JNDI命名和目录服务等更多内容。通过深入阅读和理解这份文档,开发者可以更好...

Global site tag (gtag.js) - Google Analytics