跳转至

While(true)和for(;;)哪个性能好?

面试回答

面试官: while(true)for(;;) 哪个性能好?

你:

性能完全一样,没有任何区别。

因为在编译之后,两者的字节码是完全相同的,都是一个无条件跳转指令 goto。所有差异都只停留在源码层面,被 javac 一编译就抹平了。

具体解释: while(true) 在语法上需要一个布尔表达式,而 true 是编译期常量,编译器直接把它优化成无条件跳转。 for(;;) 的循环条件为空,Java 语言规范里明确说空条件等价于 true,所以也是无条件跳转。

你反编译一下就能看到,两个写法的字节码都是一个 goto 指令往回跳,循环体完全一致。JIT 编译器更不会区别对待,它只看到相同的 goto 结构,内联、循环展开等优化也完全一样。

那为什么大家还在纠结用哪个? 主要是代码风格和工具检查。有些静态分析工具会对 while(true) 报“条件始终为真”的警告,因为它在字节码层面相当于 ifeq 判断永远不成立,然后一个 goto。而 for(;;) 本身语法上就表示无限循环,通常不会有警告。另外 for(;;) 更短,看起来更“硬核”。两者都可以选,看团队习惯,跟性能没关系。

deepseek_mermaid_20260613_62e215.png