use*_*785 1 java compiled class
在我的团队中,我们正在使用java 1.4.2大多数机器for循环正在编译为only.ie. 如果我反编译类文件,我可以看到只有循环,但某些开发人员的某些机器它变成循环.也就是说,当我反编译某些类时,它就变成了
怎么会发生?任何可能的原因,java版本或配置任何机构都可以这么认为,所以我可以重现这个缺陷并在所有开发人员机器中修复它
我不会称之为缺陷.将Java编译为字节码时,会丢失一些信息.当您随后对字节码进行反编译时,无法保证生成的Java源代码与您开始使用的源代码完全匹配.
特别是,字节码语言没有针对不同类型循环的特定指令.Java循环被编译成使用比较指令和跳转的字节码.在决定使用哪种类型的循环来产生给定的字节码时,反编译器必须做出有根据的猜测.
跨机器的行为差异可能与编译器的确切版本和这些机器上安装的反编译器的差异有关,或者可能与这些工具的配置方式有关.
代码while和for for是可互换的,没有办法从字节代码中判断出使用了哪一个(你可以推断它)你不能从字节代码中重现注释,你不能可靠地告诉for和while循环之间的不同.
例如
while(condition)
Run Code Online (Sandbox Code Playgroud)
和
for(;condition;)
Run Code Online (Sandbox Code Playgroud)
和
while(true) {
if(!condition) break;
}
Run Code Online (Sandbox Code Playgroud)
是相同的.