switch(String)的实现方式
来源:互联网 发布:什么叫算法工程师 编辑:程序博客网 时间:2024/06/05 21:01
在jdk1.7中支持了switch(String)的语法,下面从字节码角度来分析实现方式.
源码:
public static void main(String[] args) throws Exception {switch ("abc") {case "abc":task();break;case "def":task();break;}}
通过jdk提供的反编译工具javap -v反编译class文件,其中关键代码的jvm指令如下:
0: ldc #19 // String abc 2: dup 3: astore_1 4: invokevirtual #21 // Method java/lang/String.hashCode:()I 7: lookupswitch { // 2 96354: 32 99333: 44 default: 65 }32: aload_133: ldc #19 // String abc35: invokevirtual #27 // Method java/lang/String.equals:(Ljava/lang/Object;)Z38: ifne 5641: goto 6544: aload_145: ldc #31 // String def47: invokevirtual #27 // Method java/lang/String.equals:(Ljava/lang/Object;)Z50: ifne 6253: goto 6556: invokestatic #33 // Method task:()V59: goto 6562: invokestatic #33 // Method task:()V65: return
对以上做一下简短的解释:
1.常量字符串"abc"入栈
2.计算字符串的哈希值
3.根据得到的哈希值结合lookupswitch给出的列表信息(其中包含有case后面跟着的字符串的哈希值)跳转到目标位置
4.此外,在哈希值相等之后还需要比较两个字符串是否相等,因为不同的字符串哈希值可能相等,比如abc和acD,具体可以查看String类的hashCode()方法
0 0
- switch(String)的实现方式
- jdk1.7 String switch的实现
- jdk1.7 String switch的实现
- switch 的String参数
- switch (String) 的使用
- Java7中的switch支持String的实现细节
- Java7中的switch支持String的实现细节
- Java7中的switch支持String的实现细节
- Java7中的switch支持String的实现细节
- Java7中的switch支持String的实现细节
- Java7中的switch支持String的实现细节
- Java7中的switch支持String的实现细节
- Java7中的switch支持String的实现细节
- Java7中的switch支持String的实现细节
- Java7中的switch支持String的实现细节
- Java7中的switch...case支持string的实现细节
- Java7中的switch支持String的实现细节
- Java中字符串String Switch的实现原理
- 【cocos2d-x3.2游戏开发】 模态对话框拦截所有事件
- Android Studio和ADT使用技巧
- Linux下好玩的命令
- 三大范式
- 【史上最强JavaSE笔记】之数组篇
- switch(String)的实现方式
- Windows 7命令行下使用SSH通过秘钥登录Linux
- c#小作业 简单复数计算
- EXP-00008: 遇到 ORACLE 错误 904
- nutch1.8+solr 4 配置过程+ikanalayzer2012 中文分词器
- Android ViewPager简单几行代码设置滑动动画
- 使用ENVI将影像四周的黑背景设置为无色
- Linux CentOS6.5下编译安装MySQL 5.6.22
- win7ubuntu双系统