【Java基础篇】While(true) 和 for(;;)哪个性能更好呢

在这里插入图片描述

两个无限循环的性能分析

  • ✔️两者反编译比较


✔️两者反编译比较


While(true) 和 for(; 😉 都是做无限循环的代码,他们两个有什么区别呢?


关于这个问题,网上有很多的讨论,今天我收到私信,所以凑着假期,统一回复一下这个问题。


说多了无用,直接反编译吧,看看字节码有什么区别我们就明白了。


首先我们来准备两段代码:


/***    编程实现两种方式无限循环性能比较*/public class WhileAndFor {public static void main(String[] args) {//Code.1 While的无限循环while (true) {System.out.println("this is a WhileDemo......");}}
}

/***    编程实现两种方式无限循环性能比较*/public class WhileAndFor {public static void main(String[] args) {//Code.1 For的无限循环for(; ; ) {System.out.println("this is a ForDemo......");}}
}

我们首先在控制台将这两段代码编译成 .class 文件


因为我的这个电脑老是乱码,所以我加了 -encoding utf-8,你们的不需要就不用加。


javac -encoding utf-8 WhileAndFor.java


然后我们再通过javap .class 文件进行反编译,然后我们就会发现,两个文件的内容,简直是一模一样。


PS F:\Java> javac -encoding utf-8 WhileAndFor.java
PS F:\Java> javap -c WhileAndFor.class
Compiled from "WhileAndFor.java"
public class WhileAndFor {public WhileAndFor();Code:0: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;3: ldc           #13                 // String this is a Fordemo......5: invokevirtual #15                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V8: goto          0
}
PS F:\Java> javac -encoding utf-8 WhileAndFor.java
PS F:\Java> javap -c WhileAndFor.class
Compiled from "WhileAndFor.java"
public class WhileAndFor {public WhileAndFor();Code:0: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;3: ldc           #13                 // String this is a WhileDemo......5: invokevirtual #15                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V8: goto          0
}
PS F:\Java>

可以看到,都是通过goto来干的,所以,这两者其实是没有任何的区别,针对个人喜欢,用哪个都行。


有人愿意用while(true) ,因为可以更清晰的来出来这是个无限循环,有人愿意用 for(;;),因为有些 IDE 对于While(true)会给出警告。当然我们也可以抑制警告是吧,用@SuppressWarnings(“all”),当然抑制警告的属性不是只有all一种是吧,比如抑制资源警告我们用@SuppressWarnings(“resource”)有兴趣大家可以自行去查阅。


祝大家元旦快乐!阖家幸福!家庭幸福美满!事业腾飞冲天!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/313800.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件功耗管理

一、背景 功耗管理是由软件、处理器、外设、电源等一起构成的系统问题。 App中很小的低效行为在整个系统中累加后&#xff0c;会对电池寿命、性能、响应速度和温度产生明显的影响。作为app开发人员&#xff0c;我们有责任确保我们的app尽可能高效地运行。使用苹果推荐的API&a…

消息队列LiteQueue

文章目录 一、简介二、设计2.1 队列结构设计2.2 队列接口设计 三、实现3.1 队列锁的实现3.2 创建队列3.3 写入队列3.4 读出数据3.5 判断队列是否为空3.6 判断队列是否为满3.7 清空队列3.8 删除队列 四、测试参考 一、简介 收到消息时先把接收到的消息放到队列中。在任务中从队…

31K star!替换Postman ,开源优雅的API工具:Insomnia

API 调试工具大家第一个想到的肯定是Postman&#xff0c;但是这几年Postman在国内越来越难用&#xff0c;很多人也都在考虑找一个替代品。 今天我们来推荐一个可以替换掉Postman的 API 工具&#xff0c;他开源、支持本地使用&#xff0c;也更加轻量、更加优雅&#xff0c; 目前…

ROS TF坐标变换 - TF树

目录 一、TF树介绍二、TF2与TF三、构建TF树四、rviz查看TF坐标关系 一、TF树介绍 在机器人系统中&#xff0c;存在运动学模型和动力学模型。对于刚体机器人&#xff0c;动力学模型基于刚体动力学&#xff0c;代表机器人系统在运动过程中力/力矩与其运动状态的变化关系。而运动…

Python 基础语法01

变量声明 #运算 num 1 num 1 print("num 1",num)num - 1 print("num - 1", num)num * 4 print("num * 4",num)num 3 num % 2 print("num%2",num)num ** 2 print("num ** 2", num)num 9 num // 2 print("num // …

odoo17 | 创建一个新应用程序

前言 本章的目的是为创建一个全新的Odoo模块奠定基础。 我们将从头开始&#xff0c;以使我们的模块被Odoo识别所需的最低限度。 在接下来的章节中&#xff0c;我们将逐步添加功能以构建一个真实的业务案例。 教程 假设我门需要在odoo上开发一个新app模块例如房地产广告模块。…

C++的面向对象学习(9):文件操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、类的封装的多文件实现回顾二、文件操作1.对文件进行操作需要头文件<fstream>2.操作文件的三大类方法&#xff1a;读、写、读写 三、实现文本文件的读、写…

提取 PE 文件的各种信息

前段时间项目需要实现对 Windows PE 文件版本信息的提取&#xff0c;如文件说明、文件版本、产品名称、版权、原始文件名等信息。获取这些信息在 Windows 下当然有一系列的 API 函数供调用&#xff0c;简单方便。 我们先看一下PE文件结构&#xff0c;PE文件由DOS首部&#xff0…

数据结构期末复习(3)栈和队列

堆栈&#xff08;stack&#xff09; 堆栈&#xff08;stack&#xff09;是一种基于后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09;原则的数据结构。它模拟了现实生活中的堆栈&#xff0c;类似于一摞盘子或一堆书。 堆栈有两个基本操作&#xff1a;入栈&a…

【代码解析】代码解析之生成token(1)

本篇文章主要解析上一篇&#xff1a;代码解析之登录&#xff08;1&#xff09;里的第8行代码调用 TokenUtils 类里的genToken 方法 https://blog.csdn.net/m0_67930426/article/details/135327553?spm1001.2014.3001.5501 genToken方法代码如下&#xff1a; public static S…

【UE 截图】 自定义截图路径 文件名

目录 0 引言1 实践 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xff1a;【UE 截图】 自定义截图路径 文件名❣️ 寄语&#xff1a;书到用时方恨少&#xff0c;事非经过不知难&#xff01;&#x1f388; 最…

LanceDB:在对抗数据复杂性战役中,您可信赖的坐骑

LanceDB 建立在 Lance&#xff08;一种开源列式数据格式&#xff09;之上&#xff0c;具有一些有趣的功能&#xff0c;使其对 AI/ML 具有吸引力。例如&#xff0c;LanceDB 支持显式和隐式矢量化&#xff0c;能够处理各种数据类型。LanceDB 与 PyTorch 和 TensorFlow 等领先的 M…