为什么 Java 反编译器生成带有 goto 的代码?

Why do Java decompilers generate code with gotos?

反编译 .jar 文件后,我在生成的 Java 代码中看到了这一行:

for (Iterator i = val.getparts(); i.hasNext(); goto 135)

这是什么意思?如果 goto 不编译,为什么反编译的 Java 代码包含 goto 语句?

大多数反编译器不考虑 goto 在 Java 源文件中无效的事实。它出现在 jars 和类文件中,因为编译器使用它在 bytecode 级别实现以下内容:

  • if-else 语句
  • 循环
  • 开关
  • try-catch-finally