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,但是编译器不会直接进入循环体,就造成很多次无效判断


相关文章
|
XML 存储 JSON
CocosCreator 面试题(十五)Cocos Creator如何内置protobuf JS版本?
CocosCreator 面试题(十五)Cocos Creator如何内置protobuf JS版本?
667 0
cocoscreator实现spine用外部图片进行换皮
cocoscreator实现spine用外部图片进行换皮
1036 0
|
Shell Linux 计算机视觉
【Dlib】动作检测:以常见的人脸识别验证为例讲解张嘴与闭眼
【Dlib】动作检测:以常见的人脸识别验证为例讲解张嘴与闭眼
1074 0
|
安全 网络协议 网络安全
http https socket通讯详解?
http https socket通讯详解?
474 0
|
消息中间件 Java Shell
RocketMQ的broker启动失败解决
RocketMQ的broker启动失败解决
2576 0
|
9月前
|
消息中间件 运维 监控
《聊聊分布式》分布式最终一致性方案:从理论到实践的完整指南
最终一致性是分布式系统中平衡性能、可用性与一致性的关键策略,通过异步处理与容错设计,在保证数据最终一致的前提下提升系统扩展性与可靠性。
|
监控 NoSQL 网络协议
Django 实时通信实战:WebSocket 与 ASGI 全解析(上)
WebSocket 是一种全双工通信协议,支持实时数据传输,适用于聊天、协作、监控等场景。ASGI 是异步 Web 标准,配合 Uvicorn 服务器和 Django Channels,可实现 Django 的 WebSocket 功能,提升实时应用性能。
603 0
|
JSON 前端开发 JavaScript
程序员必知:字符串转换成JSON的三种方式
程序员必知:字符串转换成JSON的三种方式
1761 0
|
自然语言处理 JavaScript 程序员
UTF-8 GBK UTF8 GB2312 之间的区别和关系
【8月更文挑战第24天】UTF-8(Unicode Transformation Format-8bit)是一种多字节编码方案,用于解决国际化字符编码问题,英文使用一个字节编码,中文使用三个字节。它涵盖了全球所有国家的字符,具备良好的通用性,可在支持UTF-8的浏览器上显示。尽管可包含字节顺序标记(BOM),但通常不使用。GBK是在GB2312基础上扩展的标准,使用双字节编码,包括所有中文字符,但通用性较弱。UTF-8和GBK之间需通过Unicode转换。对于含有大量英文字符的网站或论坛,使用UTF-8编码可节省存储空间。
1095 5
|
机器学习/深度学习 数据可视化 计算机视觉
人脸检测实战高级:使用 OpenCV、Python 和 dlib 完成眨眼检测
今天,我们使用面部标记和 OpenCV 检测视频流中的眨眼次数。 为了构建我们的眨眼检测器,我们将计算一个称为眼睛纵横比 (EAR) 的指标,该指标由 Soukupová 和 Čech 在他们 2016 年的论文《使用面部标记的实时眨眼检测》中介绍。
876 0
人脸检测实战高级:使用 OpenCV、Python 和 dlib 完成眨眼检测