在Java中,while(true)的行为是否与无止境for循环相同?
以下循环在速度和CPU使用方面是否表现相同: 循环1在Java中,while(true)的行为是否与无止境for循环相同?,java,loops,Java,Loops,以下循环在速度和CPU使用方面是否表现相同: 循环1 while(true){} while(true){} 循环2 for(int i = 0; i != -1 ; i++) {} for(;;) {} 在两个不同的表达式中是否有任何差异或基本上是相同的代码 编辑: 具体说明: 在java中,以下循环在速度和CPU使用方面的行为是否相同 循环1 while(true){} while(true){} 循环2 for(int i = 0; i != -1 ; i++) {} for
while(true){}
while(true){}
循环2
for(int i = 0; i != -1 ; i++) {}
for(;;) {}
在两个不同的表达式中是否有任何差异或基本上是相同的代码
编辑:
具体说明:
在java中,以下循环在速度和CPU使用方面的行为是否相同
循环1
while(true){}
while(true){}
循环2
for(int i = 0; i != -1 ; i++) {}
for(;;) {}
这两个循环不同:
- 第一个循环永远不会停止
- 第二个循环将运行很长时间,直到
溢出,此时循环将退出i
考虑到这两个循环不一样,每个循环的字节码、CPU使用率和速度也会有所不同。相似但不相同。请记住,for循环的
i++
实际上每次都是通过循环执行的,因此速度会较慢
另外,i
初始化为0也是while循环中不会发生的事情
最后,考虑一个整数可能从其最大可能的正值翻转到其最小可能的负值的情况。
我还补充说,循环语句的任何副作用都会被运行,并且字节码对于每个(因此不同的速度/ CPU使用)<代码> >(int i=0;i<1;i++){}。不是无限循环<(;;){}的代码>为。比较错误i<-1
即使在第一次迭代中也不是真的,因此第二个语句没有任何作用如果您将问题修改为@backslax编写的内容(这在比较方面更有意义),那么在我的机器上,这两个语句都编译为相同的字节码。啊,那么当(true)和for(;;)表现相同时?第二个循环甚至不会调用一次,要实现溢出,请将条件更改为,例如,i!=-1
。