在JDK8u的jdk项目下做个很粗略的搜索:

mymbp:/Users/me/workspace/jdk8u/jdk/src
$ egrep -nr "for \\(\\s?;\\s?;" . | wc -l369
mymbp:/Users/me/workspace/jdk8u/jdk/src
$ egrep -nr "while \\(true" . | wc -l323

并没有差多少。

其次,for (;;) 在Java中的来源。个人看法是喜欢用这种写法的人,追根溯源是受到C语言里的写法的影响。这些人不一定是自己以前写C习惯了这样写,而可能是间接受以前写C的老师、前辈的影响而习惯这样写的。

在C语言里,如果不include某些头文件或者自己声明的话,是没有内建的Bool / bool类型,也没有TRUE / FALSE / true / false这些Bool / bool类型值的字面量的。所以,假定没有include那些头文件或者自己define出上述字面量,一个不把循环条件写在while (...)括号里的while语句,最常见的是这样:

  while (1) {/* ... */}

但不是所有人都喜欢看到那个魔数“1”的。而用for (;;)来表达不写循环条件(也就是循环体内不用break或goto就会是无限循环)则非常直观,这就是for语句本身的功能,而且不需要写任何魔数。

所以,这个写法就流传下来了。

顺带一提,在Java里我是倾向于写while (true)的,不过我也不介意别人在他们自己的项目里写for (;;)。

至于Java里的for (;;)与while (true),哪个更快?

这种规范没有规定的问题,答案都是“看实现”,毕竟实现只要保证语义符合规范就行了,而效率并不在规范管得着的范畴内。以Oracle/Sun JDK8u / OpenJDK8u的实现来看,首先看javac对下面俩语句的编译结果:

public void foo() {int i = 0;while (true) { i++; }}/*public void foo();Code:stack=1, locals=2, args_size=10: iconst_01: istore_12: iinc          1, 15: goto          2
*/

public void bar() {int i = 0;for (;;) { i++; }}/*public void bar();Code:stack=1, locals=2, args_size=10: iconst_01: istore_12: iinc          1, 15: goto          2
*/

连javac这种几乎什么优化都不做(只做了Java语言规范规定一定要做的常量折叠,和非常少量别的优化)的编译器,对上面俩版本的代码都生成了一样的字节码。

后面到解释执行、JIT编译之类的就不用说了,输入都一样,输出也不会不同。

琢磨琢磨,while (true) 和 for (;;) 哪个更快?!相关推荐

  1. 有了 for (;;) 为什么还需要 while (true) ? 到底哪个更快?

    今日推荐 这 9 个 Java 开源项目 yyds,你知道几个?阿里技术专家推荐的20本书,免费送!K8S 部署 SpringBoot 项目(一篇够用)妙用Java 8中的 Function接口 消灭 ...

  2. 快手二面:Java 里的 for (;;) 与 while (true),哪个更快?

    转自:知乎 www.zhihu.com/question/52311366/answer/1300903 在 JDK8u 的 jdk 项目下做个很粗略的搜索: mymbp:/Users/me/work ...

  3. while (true) 和 for (;;) 到底哪个更快?

    作者 | RednaxelaFX 来源 | https://zhihu.com/question/52311366/answer/130090347 在JDK8u的jdk项目下做个很粗略的搜索: my ...

  4. bool在哪个头文件_Java里的 for (;;) 与 while (true),哪个更快?

    点击上方"朱小厮的博客",选择"设为星标" 做积极的人,而不是积极废人! 本文来自: https://www.zhihu.com/question/523113 ...

  5. getdevicecaps在哪个头文件里_一招定胜负,while (true) 和 for (;;) 到底哪个更快

    在JDK8u的jdk项目下做个很粗略的搜索: mymbp:/Users/me/workspace/jdk8u/jdk/src$ egrep -nr "for (s?;s?;" . ...

  6. Java里的 for (;;) 与 while (true),哪个更快?

    在JDK8u的jdk项目下做个很粗略的搜索: 并没有差多少. 其次,for (;;) 在Java中的来源.个人看法是喜欢用这种写法的人,追根溯源是受到C语言里的写法的影响.这些人不一定是自己以前写C习 ...

  7. 刘强东:猪飞到天疯狂了十几秒 但摔下死得更快

     刘强东:猪飞到天疯狂了十几秒 但摔下死得更快 2015年09月22日09:47   新浪科技    我有话说(6,450人参与) 收藏本文      查看最新行情 京东CEO刘强东 新浪科技讯 ...

  8. 总结 10 年前端经验,谈谈前端人如何更快地成长

    常言道:三十年河东.三十年河西.这句话放到前端领域,就要变成 "十年河东.十年河西",甚至每隔三五年,前端行业的技术格局就会大面积翻新.对于资深的前端开发者来说,已经适应了这种更新 ...

  9. msdn安装后怎么用_Win10不好用?安装官方版精简Win10后,运行比win7更快更流畅

    尽管不想承认,确实是大白菜的电脑配置有点旧了,导致从win7升级最新版win10系统后,电脑是100个不好用!!! 虽然,非常怀念使用win7系统时,那种操作的流畅度,那种运行的速度~ 但是,大白菜和 ...

最新文章

  1. ue5新手零基础学习教程 Unreal Engine 5 Beginner Tutorial - UE5 Starter Course
  2. java 生成parquet文件格式,使用Java API将Parquet格式写入HDFS,而不使用Avro和MR
  3. samba服务的搭建
  4. 北交专升本计算机联锁考试题,北交《计算机联锁技术》在线作业一15春满分答案...
  5. [笔记]极大极小过程的alpha-beta剪枝不可与记忆化搜索一起使用
  6. 大数据学习笔记27:MR案例——多输入源处理成绩
  7. 5个元素排序java_Android-java-如何按对象内的某个值对对象列表进行排序
  8. 专科计算机组成原理大一试题及答案,计算机组成原理专科试题答案.doc
  9. java的核心类库_Java核心类库
  10. 本地与服务器文件同步软件哪个好,同步软件哪个好,亲身体验的3款免费同步软件介绍...
  11. PDF编辑软件如何编辑PDF文件
  12. 【运筹学】线性规划 单纯形法原理 ( 构造初始可行基 | 基变换 | 最优性检验 | 解的判别 | 检验数 | ( 唯一 / 无穷多 ) 最优解判别定理 | 无界解判别定理 )
  13. win10黑科技,新建桌面非常好用
  14. 一个view事件分发,面试官6连问直击灵魂,我被虐的体无完肤
  15. Nginx教程(二) Nginx虚拟主机配置
  16. DNS劫持,HTTP劫持、HTTPS劫持【流量劫持】
  17. 4G物联网卡的几点优势
  18. 《白话统计》笔记之正态性与方差齐性
  19. sin72度用计算机怎么算,三角函数值
  20. egg支持路径别名@

热门文章

  1. 超过100本的linux免费书籍
  2. 数据库SQL面试题七则
  3. WPF#39;s Style BasedOn
  4. 第4章 与缓冲区有关的函数
  5. Zabbix如何实现Server和Agent的通信加密
  6. Centos 7 防火墙
  7. 【VMCloud云平台】SCO(七)如何使用集成包
  8. WinRAR 注册方法
  9. Fedora13安装Gnome-shell
  10. 设计模式-结构型-装饰