【发布时间】:2017-10-30 09:15:27
【问题描述】:
我使用jd-gui 反编译了一个.jar 文件并检查了代码,我发现它与原始.java 文件不同。
-
原代码
if ( total != 0 ) { result[ i ] = bdResult.multiply( bdItem ).divide( bdTotal, 0, RoundingMode.DOWN ).setScale( 0, RoundingMode.DOWN ).intValue(); } -
反编译代码
if (total == 0) continue; result[i] = bdResult.multiply(bdItem).divide(bdTotal, 0, RoundingMode.DOWN).setScale(0, RoundingMode.DOWN).intValue();
为什么会这样?
此外,反编译的代码似乎语法错误(大括号在哪里?)
【问题讨论】:
-
如果没有大括号,if语句在第一个';'处结束遇到了,所以就在 continue 关键字后面
-
因为无法从编译后的代码中获取原始源代码。
-
我知道
if语句是如何工作的并且无法获得原始代码,但我仍然想知道!=被转换为== continue;。这个改动是编译器做的? -
编译器将根据提供给它的编码标准修改我们的代码,在这种情况下你不应该使用括号。同样明智的是,如果您不添加超类构造函数,它将添加。
-
@RohanKishibe 是的。
标签: java decompiler