反编译以下for-each循环的.class文件会产生有趣的结果。
源代码 - Main.java:
public class Main {
public static void main(String[] args) {
String[] names = new String[3];
int var3 = 3;
for (String name : names) {
System.out.println(name);
}
}
}
结果 - Main.class:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
public class Main {
public Main() {
}
public static void main(String[] args) {
String[] names = new String[3];
int var3 = true;
String[] var3 = names;
int var4 = names.length;
for(int var5 = 0; var5 < var4; ++var5) {
String name = var3[var5];
System.out.println(name);
}
}
}
使用IntelliJ IDEA反编译了该文件。
- 为什么将未使用的
int
赋值为true
? - 为什么需要重新声明
var3
变量?
这是反编译工具的错误吗?
public static void main(String[] args) { String[] names = new String[3]; int var3 = 3; String[] arrayOfString1; int j = (arrayOfString1 = names).length; for (int i = 0; i < j; i++) { String name = arrayOfString1[i]; System.out.println(name); } }
- royalghost