最新版本存在 bug。
在使用此工具来反编译自己的 Java 代码进行测试时,它会将一些内容错误地反编译。例如,当我的代码包含以下类型的 for 循环时: for (int n = 0; n<1000000; n++) 我发现它被反编译为: for (byte b = 0; b<100000; b++) 这两个问题都是新的。我不确定它们是何时引入的,但我记得曾经有一个版本没有这两个问题。我知道这肯定是一个 bug,因为它显示了错误的数据类型(而且只有在 int 位于 for 循环中时才会出现这个问题,而不是在所有使用 int 的上下文中)。一个正确的反编译器永远不会将 int 类型的变量反编译为 byte 类型的变量。而且,以前的版本中绝对不存在这个 bug,否则我早就会注意到它并及早报告。此外,它会重命名所有内容。在我的主函数中,它定义为: public static void main(String[] args) 但是,当 jd-gui 反编译时,它显示为: public static void main(String[] paramArrayOfString) 以前并没有这样做。对于在 Minecraft 中进行 obfuscated 代码的反编译(我曾经读过,MC 的反编译是创建 jd-gui 的主要灵感),这很有用(通过变量名给出变量的提示),但当处理非 obfuscated 代码时,应该有一个选项来禁用变量和函数参数的重命名。但是,当调试自己的代码(使用反编译器查看 Java 在编译后如何看待我的代码,以确保它与实际源代码相同,或者至少与源代码等价)时,你绝对应该关闭此功能。所以,我不知道这是一个 bug,还是一个他们只是忘记添加一个设置来让你启用或禁用它的功能。但是,请修复这些问题。
内容来源: java-decompiler/jd-gui