今日推荐

这 9 个 Java 开源项目 yyds,你知道几个?阿里技术专家推荐的20本书,免费送!K8S 部署 SpringBoot 项目(一篇够用)妙用Java 8中的 Function接口 消灭if...else(非常新颖的写法)
Nginx 入门到实战,新手必懂。

作者:RednaxelaFX
链接:zhihu.com/question/52311366/answer/130090347

在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面试库小程序在线刷题。

顺带一提,在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编译之类的就不用说了,输入都一样,输出也不会不同。

推荐文章
1、一款高颜值的 SpringBoot+JPA 博客项目2、超优 Vue+Element+Spring 中后端解决方案3、推荐几个支付项目!4、推荐一个 Java 企业信息化系统5、一款基于 Spring Boot 的现代化社区(论坛/问答/社交网络/博客)

有了 for (;;) 为什么还需要 while (true) ? 到底哪个更快?相关推荐

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

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

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

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

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

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

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

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

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

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

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

    点击关注公众号,Java干货及时送达 在JDK8u的jdk项目下做个很粗略的搜索: mymbp:/Users/me/workspace/jdk8u/jdk/src $ egrep -nr " ...

  7. 琢磨琢磨,while (true) 和 for (;;) 哪个更快?!

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

  8. python append函数_让你python代码更快的3个小技巧!速度提高了一倍还多

    大家好!今天呢,我们来聊一聊如何加速你的 python 代码. Python 语言的优点可以列举出许多,语法简单易懂.模块丰富.应用广泛等等.但是世界上没有有完美的东西,python 一个明显缺点就是 ...

  9. 还不会哈希吗?快进来一探究竟

    Hash目录 一. 无序系列关联式容器 1. 对比 2. unordered_map 3. unordered_set 4.小总结 二. 哈希表 1. 哈希函数 直接定址法 除留余数法 平方取中法 2 ...

最新文章

  1. Java7之线程池ForkJoinPool
  2. 项目日报模板_雄东片区A单元安置房项目首栋住宅楼主体结构封顶
  3. php面向对象的概括图解,深入分析php之面向对象
  4. 搜索引擎优化网页设计:最佳实践
  5. ecshop 标签使用 非常好的例子
  6. Debug Assertion Failed _CrtlsValidHeapPointer(block) realloc堆引发的错误
  7. python中pd.read_Windows下Python的pd.read_excel()报错
  8. iView学习笔记(四):Form表单操作
  9. 人工智能时代的危机_AI信任危机:如何前进
  10. SpringBoot移除内置Tomcat
  11. 中文停用词库,不用C币直接复制
  12. 互联网快讯:百度地图第二代车道级导航上线;猿辅导推智能练习本布局教育智能硬件;vivo WATCH 2智能手表正式发布
  13. UE4大场景解决方案 ——Pak的打包与加载
  14. token代替session使用
  15. 5G能否成化合物半导体产业突破口
  16. java 摩尔斯电码_使用Java进行摩尔斯电码转换
  17. Java进阶4-Elasticsearch
  18. html弹窗可以关闭,js 点击弹窗以外 关闭弹窗
  19. 微信小程序 保存图片
  20. 【转载】elastic-job链接zookeeper报错KeeperErrorCode = OperationTimeout

热门文章

  1. sturst2的原理及环境搭建
  2. Silverlight - Out of Browser配置,安装和卸载
  3. 也许你不知道的c#基本数据类型及其默认值
  4. Linux之解析鼠标input事件数据
  5. linux内核之 phys_to_virt
  6. 二、前端开发-HTML
  7. 现代密码学2.4--香农定理/Shannon Theorem:完美安全的充分必要条件
  8. 设计模式--抽象工厂(Abstract Factory)模式
  9. 【Python小脚本】实现王者农药自动刷金币啦~啦啦啦走跟我一起组队~
  10. 【Flask】Jinja2模板的使用及控制语句