Java中while(true)与for(;;)是没有区别的

测试代码:

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语言中,在其他语言中编译后是汇编语言,我也没有去逐一验证,在知乎上看见一个人的回答while (true) 和 for ( ; ; )
当然,我还没有去验证,希望有同学验证过后在评论处讲解一下

我也是在无意间才发现原来还有for(;;)这种写无限循环的方式,然后就在网上找了一些blog比较二者之间的不同,感觉在直呼里面给出的几个答案互相之间都不太服气的样子<这里是原题目链接>。还是在看了其他人博客里面写的查看编译后的字节码的方法,才模仿着试着做了一下,顺便学习了一下怎么在IDEA里面通过添加jclasslib Bytecode viewer工具查看Java文件编译后的字节码文件。在这里记录一下。。。

猜你喜欢

转载自blog.csdn.net/fire_to_me/article/details/81183065