Java 里的 for () 与 while (true)哪个更快_第1页
Java 里的 for () 与 while (true)哪个更快_第2页
Java 里的 for () 与 while (true)哪个更快_第3页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java里的for(;;)与while(true),哪个更快?在JDK8u的jdk项目下做个很粗略的搜索:mymbp:/Users/me/workspace/jdk8u/jdk/src$egrep-nr"for\\(\\s?;\\s?;".|wc-l369mymbp:/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里while(true)与for(;;)哪个“效率更高”这种规范没有规定的问题,答案都是“看实现”,毕竟实现只要保证语义符合规范就行了,而效率并不在规范管得着的范畴内。首先看javac对下面俩语句的编译结果以Oracle/SunJDK8u/OpenJDK8u的实现来看:publicvoidfoo(){inti=0;while(true){i++;}}/*publicvoidfoo();Code:stack=1,locals=2,args_size=10:iconst_01:istore_12:iinc1,15:goto2*/与publicvoidbar(){inti=0;for(;;){i++;}}/*publicvoidbar();Code:stack=1,locals=2,args_size=10:iconst_01:istore_12:iinc1,15:goto2*/连javac这种几乎什么优化都不做(只做了Java语言规范规定一定要做的常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论