答案:没有任何区别。
两段代码如下:
public class test {
public static void main(String[] args) {
for(int i=0;i<3;i++){
System.out.println(i);
}
}
}
public class test {
public static void main(String[] args) {
for(int i=0;i<3;++i){
System.out.println(i);
}
}
}
javap -c class文件后输出main方法均为:
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iload_1
3: iconst_3
4: if_icmpge 20
7: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
10: iload_1
11: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
14: iinc 1, 1
17: goto 2
20: return
完全一样。更多的测试显示,当i++和++i单独成一行,如
public class test {
public static void main(String[] args) {
int i=0;
// i++;
++i;
}
}
会被统一优化为++i。对应字节码均为:
public static void main(java.lang.String[]);
Code:
0: iconst_0
1: istore_1
2: iinc 1, 1
5: return