测试代码:
public class Test {
public static void main(String [] aargs){
test0();
test1();
}
public static void test0(){
int i =0;
for(;;){
System.out.println(i);
}
}
public static void test1 (){
int i =0;
while(true){
System.out.println(i);
}
}
}
生成的字节码:
test0
0 iconst_0
1 istore_0
2 getstatic #4 <java/lang/System.out>
5 iload_0
6 invokevirtual #5 <java/io/PrintStream.println>
9 goto 2 (-7)
test1
0 iconst_0
1 istore_0
2 getstatic #4 <java/lang/System.out>
5 iload_0
6 invokevirtual #5 <java/io/PrintStream.println>
9 goto 2 (-7)
可以看到,二者在编译成字节码之后是完全相同的
这种情况仅限在Java语言中,在其他语言中编译后是汇编语言,我也没有去逐一验证,在知乎上看见一个人的回答
当然,我还没有去验证,希望有同学验证过后在评论处讲解一下
我也是在无意间才发现原来还有for(;;)这种写无限循环的方式,然后就在网上找了一些blog比较二者之间的不同,感觉在直呼里面给出的几个答案互相之间都不太服气的样子<这里是原题目链接>。还是在看了其他人博客里面写的查看编译后的字节码的方法,才模仿着试着做了一下,顺便学习了一下怎么在IDEA里面通过添加jclasslib Bytecode viewer工具查看Java文件编译后的字节码文件。在这里记录一下。。。