经过上一次的编辑,我发现csdn的markdown太难看了,所以还是用html的吧。
1.java学习的过程中突然间想到的问题,之前在用的时候并没有太细去想,只是知道这两者能够表示无限循环,但两者可能内部有一些区别。所以也就去查了一下。
a.先引用一下一篇博客 http://fuliguo.iteye.com/blog/2229044 ,博主讲的很细致了,总结就是,for(;;)和while(true)在转为class文件之后,他们的字节码文件是一样的,所以使用只看个人习惯。
b.当然如果只是这样我也不会写这篇东西了。
c.在c语言中while(1)等同于java中的while(true),for(;;)的使用两者是一样的,而C语言中while(1)和for(;;)是有区别的:
while(1)在编译后:
<span style="font-family:FangSong_GB2312;font-size:12px;">mov eax,1 test eax,eax je foo+23h jmp foo+18h</span>
for(;;)在编译后:
<span style="font-family:FangSong_GB2312;font-size:12px;">jmp foo+23h</span>
区别非常明显,for(;;)在c语言中指令较少,也能够节省内存,没有判断跳转,是比while(1)更好的无限循环。
d.当然我并不知道在java中while(true)和for(;;)是否也有这样类似的差别,但上一篇博客中写的也是有根有据的
e.因此结合两方来说,我更支持使用for(;;)来做这个无限循环。