Java里的 for (;;) 与 while (true),哪个更快?
在JDK8u的jdk项目下做个很粗略的搜索:
并没有差多少。
其次,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对下面俩语句的编译结果:
连javac这种几乎什么优化都不做(只做了Java语言规范规定一定要做的常量折叠,和非常少量别的优化)的编译器,对上面俩版本的代码都生成了一样的字节码。
后面到解释执行、JIT编译之类的就不用说了,输入都一样,输出也不会不同。
为了让学习变得轻松、高效,今天给大家免费分享一套Java教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要资料的欢迎加入学习交流群:9285,05736
Java里的 for (;;) 与 while (true),哪个更快?相关推荐
- Java 里的 for (;;) 与 while (true),哪个更快?
点击关注公众号,Java干货及时送达 在JDK8u的jdk项目下做个很粗略的搜索: mymbp:/Users/me/workspace/jdk8u/jdk/src $ egrep -nr " ...
- 快手二面:Java 里的 for (;;) 与 while (true),哪个更快?
转自:知乎 www.zhihu.com/question/52311366/answer/1300903 在 JDK8u 的 jdk 项目下做个很粗略的搜索: mymbp:/Users/me/work ...
- Java VS Go,微服务究竟谁更快?
作者 | 程序猿DD 责编 | 张文 头图 | CSDN 下载自视觉中国 Java 微服务能像 Go 微服务一样快吗?这是我最近一直在思索的一个问题. 去年 8 月份的 the Oracle Gr ...
- java 加载中_Java 6类加载中更快的是什么?
小编典典 Java 6编译器将预验证信息添加到类文件中 如果Java虚拟机实现曾经尝试对50.0版类文件执行通过类型推断的验证,则在通过类型检查的验证失败的所有情况下都必须这样做. 这意味着Java虚 ...
- java native堆_Java Native Memory比堆更快吗?
执行IO时,直接内存更快,因为它可以避免一个数据副本.但是,对于95%的申请,您不会注意到差异. 您可以将数据存储在直接内存中,但是它不会比存储数据POJO快. (或安全,可读或可维护)如果您担心GC ...
- bool在哪个头文件_Java里的 for (;;) 与 while (true),哪个更快?
点击上方"朱小厮的博客",选择"设为星标" 做积极的人,而不是积极废人! 本文来自: https://www.zhihu.com/question/523113 ...
- getdevicecaps在哪个头文件里_一招定胜负,while (true) 和 for (;;) 到底哪个更快
在JDK8u的jdk项目下做个很粗略的搜索: mymbp:/Users/me/workspace/jdk8u/jdk/src$ egrep -nr "for (s?;s?;" . ...
- while (true) 和 for (;;) 到底哪个更快?
作者 | RednaxelaFX 来源 | https://zhihu.com/question/52311366/answer/130090347 在JDK8u的jdk项目下做个很粗略的搜索: my ...
- 琢磨琢磨,while (true) 和 for (;;) 哪个更快?!
在JDK8u的jdk项目下做个很粗略的搜索: mymbp:/Users/me/workspace/jdk8u/jdk/src $ egrep -nr "for \\(\\s?;\\s?;&q ...
最新文章
- php数字截取2位小树,数据结构-PHP 二分搜索树的层序遍历(队列实现)
- 保存一下dedecms数据库表和字段说明,方便日后查询
- keras ImageDataGenerator 用法
- SAP批次级别的意义及启用操作
- C语言试题四十之使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。
- *【计蒜客 - 蓝桥训练】人以群分(二分 + dp)
- [转载] python导入numpy函数库
- 微信小程序云开发教程-云函数获取用户授权信息
- mongodb索引 多健索引
- 下载npm并配置npm环境
- MyBatis事务管理
- 编程语言分类-编译型,解释型
- 如何在 2 分钟内入睡(二战时期美国飞行员训练法)
- 乐高无限自己地图无法服务器,乐高无限地图制作攻略 建造的小细节不要错过...
- java红宝石是哪本_以月/年红宝石显示帖子
- DS18B20的使用介绍
- android工程文件assts,应用程序基础androiddevelopers英文翻译本科论文.docx
- java后台 apiV3 对接微信app支付
- 生日快乐程序_「秒福」小程序:送祝福,2020我们不一样
- 第7期——AP上线过程
热门文章
- .net打包自动安装数据库
- spring-security-学习笔记-01-基本概念
- Vue前后端对接时判断是否与后端连接成功
- 一种基于平衡二叉树(AVL树)插入、查找和删除的简易图书管理系统
- get和post的联系与区别
- python嵌套列表法实现树_python – 将嵌套的括号树转换为嵌套列表
- openvino安装小记
- 创建启动oracle快捷方式,GNOME3创建连接OracleFS管理软件启动快捷方式
- python的matplotlib生成colorbar
- Halcon学习笔记(一):Qt+Halcon联合开发配置