java - Java 中有类似分支/跳转表的东西吗?

标签 java branch jump-table

Java有没有类似于分支或跳转表的东西?

分支表或跳转表是,according to wikipedia ,

a term used to describe an efficient method of transferring program control (branching) to another part of a program (or a different program that may have been dynamically loaded) using a table of branch instructions.

Java 是否有类似的东西,还是我只需要使用 if/else if/else 或 case 语句?

最佳答案

Java 有一个 switch statement , 但它是否编译为字节码中的跳转表取决于实现。通常,如果编译器在您的 switch 语句中为每种情况找到合适的常量,它们将为您构建一个跳转表。不过,我不确定您是否真的应该关心它是如何实现的。如果您首先使用 Java 进行编码,那么让编译器和 JIT 为您处理这些事情可能会很好。

请注意,switch 仅适用于整数原始类型和枚举,因此如果您使用其他对象类型,则确实需要使用 if/else 语句(并且您可能不应该比较 double 或为平等而漂浮)。

最后,即使枚举引用在技术上是“常量”,一些编译器只会在您打开枚举时为您生成一个跳转表如果您的 switch 语句位于枚举所在的同一编译单元中定义。否则,它将为您生成一个 if/else 链(就像您必须为常规对象做的那样)。有关详细信息,请参阅 java.net forums on extending switch usage for Objects .

关于java - Java 中有类似分支/跳转表的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/548053/

相关文章:

java - Guava MapMaker和JDK ConcurrentMap是否使用读/写锁?

git - 不小心创建了具有现有名称的新分支

c# - 在 TFS 中的解决方案之间共享代码

mercurial - 配置 Hudson/Jenkins 以构建所有 mercurial 分支

c - 'switch' 比 'if' 快吗?

java - 从注释处理器应用 CGLib 代理

java - 在一行中设置一个变量并检查是否相等

java - 为什么返回List<?扩展 T> 只读并返回 List<? super T> 只写?