当前位置:  开发笔记 > 编程语言 > 正文

Java和交换机案例

如何解决《Java和交换机案例》经验,为你挑选了1个好方法。

有没有人知道为什么Java不允许你打开大于整数的数字?这背后有任何技术原因吗?



1> VonC..:

至于说在这里,开关用字节,短,char和INT基本数据类型的作品.它还适用于枚举类型和一些"包装"某些基本类型的特殊类:Character,Byte,Short和Integer.

Java switch语句被编译到JVM字节码tableswitch或lookupswitch中.这两个字节码都要求case值是唯一的,32位,整数,编译时常量.

tableswitch和lookupswitch指令都包括一个默认分支偏移和一组可变长度的case值/分支偏移对.
两个指令都从堆栈中弹出密钥(紧跟在switch关键字后面的括号中的表达式的值).
将密钥与所有案例值进行比较:

如果找到匹配,则采用与案例值相关联的分支偏移.

如果未找到匹配项,则采用默认分支偏移量.

尽管上面描述了实现细节,但我相信用于切换的类型是与控制流的高效字节码兼容的类型,并且它可能是这种选择的重要部分.

正如在这个Java Bug中所说:

我想您可以允许Java switch语句包含其他类型的值,并编译一个switch语句,该语句将这些值中的一种用于其他字节码,例如ifs和gotos序列.但是我们必须仔细检查所有的switch语句,以确定它是否会被编译成快速切换字节码或if-elses的慢速序列.

正如在其他Java bug中所说的那样

'switch'语句可以使用函数表调度和/或二叉树搜索来匹配case语句,而不仅仅是按顺序逐个测试它们.


这是实施细节.不是这种选择的实际原因.
推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有