当我们有时用到死循环时,会用到for(;;)和while(true),它们的作用都是一样的,都是无限循环方法体中的代码;可是它们有什么区别呢?
1.在Java中是两者是没有区别的,它们都被优化成了goto,如图:
这是源代码
这是编译后的字节码
- 由此可见,在java中两者之间是没有区别的
2.在c中,两者是有区别的;
在c中while(1)等同于java中的while(true),在c中while(1)的编译后如下:
mov eax,1
test eax,eax
je foo+23h
jmp foo+18h
for(;;)在编译后:
mp foo+23h
- 区别很明显:for(;;)在c语言中指令较少,也能够节省内存,没有判断跳转,是比while(1)更好的无限循环。
总结:在java中for(;;)和while(true)是没有任何区别的,所以用哪种方式都可以,个人更习惯于用
for(;;)
。