for( ; ; )和while(true)的区别

简介: 喜欢看源码的同学可能都会发现,很多组件的作者在做死循环时,都喜欢用for( ; ; ),while(true)或者while(1)也能实现死循环,为啥大佬们都用for( ; ; )呢

喜欢看源码的同学可能都会发现,很多组件的作者在做死循环时,都喜欢用for( ; ; ),while(true)或者while(1)也能实现死循环,为啥大佬们都用for( ; ; )呢

我们看下这两者的字节码

public class ForTest {
    public static void main(String[] args) {
        for (;;){
            System.out.println("666");
        }
    }
}

20210324100432104.png

public class WhileTrueTest {
    public static void main(String[] args) {
        while (true) {
            System.out.println("666");
        }
    }
}

20210324100520144.png

很失望,他们的字节码是一毛一样的


后来我查阅了很多书籍(搜了很多博客),发现是这么回事


for( ; ; ),这在编译器看来,两个";"代表空语句,编译器在编译时会优化掉,直接进入循环体

而对于while(true),编译器每次都会对true做一次判断,尽管是true,但是编译器不会直接进入循环体,就造成很多次无效判断


相关文章
|
芯片
使用EEPROM断电保存数据
本文介绍了Arduino中EEPROM的使用,EEPROM是一种非易失性存储器,用于在断电后保留数据。Arduino的各种控制器如UNO、duemilanove等内置或可外接EEPROM,容量不同。Arduino库提供了`EEPROM.h`来支持读写操作。示例代码展示了如何写入、读取和清除EEPROM的内容。写入时,通过`EEPROM.write()`函数将模拟输入值存入指定地址;读取时,用`EEPROM.read()`函数获取地址处的值;清除则遍历所有地址并写入0。
358 5
|
算法 Java 编译器
【C++ 14新特性 】C++14 数字分隔符:深入理解与实践
【C++ 14新特性 】C++14 数字分隔符:深入理解与实践
527 2
|
开发者 黑灰产治理
专家博主最新专享福利上线!发文即得积分好礼!
最新专享福利上线!赢取海量积分兑换心仪礼品
737 0
|
9月前
|
人工智能 智能设计 物联网
阿里云设计中心携手金鸡电影节青年创作人,用AI技术加速电影工业升级
阿里云设计中心携手金鸡电影节青年创作人,用AI技术加速电影工业升级
|
Windows
github图床链接打开提示raw.githubusercontent.com无法访问解决
picgo上传图片不显示,到GitHub打开也不显示图片,粘贴链接访问提示“raw.githubusercontent.com无法访问”,百度搜索后修改了下hosts解决了。
1207 2
github图床链接打开提示raw.githubusercontent.com无法访问解决
|
Java 数据库连接 开发者
在Spring的try-catch块中手动实现事务回滚
在Spring的try-catch块中手动实现事务回滚
536 0
|
存储 Java 数据挖掘
|
运维 网络协议 算法
不为人知的网络编程(十六):深入分析与解决TCP的RST经典异常问题
本文将从TCP的RST技术原理、排查手段、现网痛难点案例三个方面,自上而下、循序渐进地给读者带来一套完整的分析方法和解决思路。
539 0
|
开发工具 git
【分支管理】远程分支删除后在本地还能看到的解决办法
【分支管理】远程分支删除后在本地还能看到的解决办法
|
存储 安全 程序员
【C++标准的演化】逐步解决历史遗留问题,从C++11到C++26的改进
【C++标准的演化】逐步解决历史遗留问题,从C++11到C++26的改进
643 0