我一直在阅读作者使用的编程书(java)for(;;)
而不是while(true)
. 这件事真的开始让我烦恼,所以我想我应该检查哪个是最好用的,是否有任何差异。以下是可能的无限循环:
for(;;){
}
while(true){
}
do{
}while(true)
- 哪个更适合使用?
- 性能上是否有任何差异(例如您必须测试在 while 情况下是否为真)或者它们是否编译为相同的东西?
我一直在阅读作者使用的编程书(java)for(;;)
而不是while(true)
. 这件事真的开始让我烦恼,所以我想我应该检查哪个是最好用的,是否有任何差异。以下是可能的无限循环:
for(;;){
}
while(true){
}
do{
}while(true)
它们被编译成同一个东西,只是风格问题。年长的程序员可能会认出for(;;)
,但我可能只会使用while(true)
.
是的,这只是风格问题,我更喜欢while(true)
,因为意图很明显。for(;;)
只是没有对我说什么。
如有疑问,请测量。
如果不出意外,编写所有三个版本并查看为每个版本生成的程序集。除非编译器非常愚蠢,否则我敢打赌它会为所有三个生成完全相同的代码。
编辑
FWIW,gcc 为所有三个生成相同的代码(至少在我编写的死简单案例中)。 while(true)
在编译时可计算;无需执行测试,只需硬编码跳转回循环的开头。
它们在性能方面应该是相同的,但即使它们不是,速度也不像可读性那么重要。最好的方法是任何查看代码的人都会很快将其识别为无限循环的方法。我倾向于while (true)
因为它是最基本的情况,但这取决于谁在查看代码。