结论:从编译后的字节码文件看,for(;;) 和 while(true) 在底层用的相同的实现,两种写法没有区别。 1、for(;;) @Test public void test(){ for(;;){ System.out.println("for"+"+++"); } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 编译后的字节码 public void test();
在Java5 中引入了一种主要用于数组的增强型 for 循环。 while 循环 while是最基本的循环,它的结构为: while(布尔表达式){//循环内容} 只要布尔表达式为 true,循环就会一直执行下去。 实例 Test.java 文件代码: publicclassTest{publicstaticvoidmain(String[]args){intx=10;while(x<20){System.out.print("val...
结论 无论是for(;;)还是while(true),在Java中都是优化成goto没区别,结果来看,两种方法经过编译优化后,是一样的效果. 那么问题又来了,为什么有的人喜欢写成for(;;)的形式呢 这个问题,我也疑惑,最后通过谷歌得到一个结果: 对于早期的C语言,两种写法性能会不一样。for语句编译器会优化成一条汇编指令,而while判...
for死循环和while死循环编译后的字节码(编译器是可以做优化的),完全一模一样,所以两者在使用过程中,其实是没有任何区别。看到这里是不是有点生气,但是又想问问什么源码那些大佬写代码基本上不用while(true),我想主要原因还是早期C语言中for(;;)循环和while(1)编译生成的字节码不一样,for(;;)生成的字节码明显更...
从效率上看,while(true)每次循环要判断循环条件,for(;;)循环没有判断,理论上节省机器指令。 下面我们就通过查看编译后的代码,来证明以下for(;;)和while(true)的区别 首先整理一个带编译的测试代码,如下 通过javac 将Test.java 编译成Test.class 字节码文件 ...
while(true)是一种无限循环的实现方式,适用于需要不确定次数的循环场景。 如何终止while(true)循环? 使用break语句跳出循环,终止循环的执行。 while(true)与for循环的区别是什么? while(true)结构适用于不确定循环次数的场景,而for循环通常用于已知循环次数的场景。 break语句的作用是什么? break语句用于跳出当前循环,...
Java中for(;;)与while(true)的区别 for(;;)与while(true)在java中只看个人喜好,二者没区别! 请看下图: 编译后的字节码都一样,根本没有什么区别。 但为啥网上有的人说二者有区别呢? 那是因为在C语言中 1 2 3 4 5 编译前 编译后 while(1); mov eax,1...
顺带一提,在Java里我是倾向于写while (true)的,不过我也不介意别人在他们自己的项目里写for (;;)。 至于Java里while (true)与for (;;)哪个“效率更高” 这种规范没有规定的问题,答案都是“看实现”,毕竟实现只要保证语义符合规范就行了,而...
顺带一提,在Java里我是倾向于写while (true)的,不过我也不介意别人在他们自己的项目里写for (;;)。 至于Java里的for (;;)与while (true),哪个更快? 这种规范没有规定的问题,答案都是“看实现”,毕竟实现只要保证语义符合规范就行了,而效率并不在规范管得着的范畴内。 以Oracle/Sun JDK8u / OpenJDK8...
3 ldc #3 <while...> 5 invokevirtual #4 <java/io/PrintStream.println> 8goto0 (-8) 根据while与for;;的字节码看,一模一样,没有区别。都是执行完一句后再“GOTO”到最开始。 所以结论就是:java中 while(true)和for(;;)效率一样,没有区别...