【Java语言】while与for执行效率对比
测试环境(虚拟机版本): sun jdk build 1.6.0_22-b04
测试程序
/**
* Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC)
* All rights reserved.
* Author: Jarg Yee <yeshaoting@gmail.com>
* http://jarg.iteye.com/
*/
import java.util.*;
/*
* 【Java语言】while,for执行效率对比
*/
public class WhileFor
{
public static void main(String[] args)
{
System.out.println(whileTest());
System.out.println(forTest());
}
/** while测试 */
public static long whileTest()
{
int num = Integer.MAX_VALUE; // 迭代次数
long sum = 0; // 保存加法结果
while((num--)>0)
{
sum = sum + num;
}
return sum;
}
/** for测试 */
public static long forTest()
{
int num=Integer.MAX_VALUE; // 迭代次数
long sum = 0; // 保存加法结果
for(;(num--)>0;)
{
sum = sum + num;
}
return sum;
}
}
class文件反编译指令
---------- Java反编译 ----------
Compiled from "WhileFor.java"
public class WhileFor extends java.lang.Object{
public WhileFor();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 11: 0
public static void main(java.lang.String[]);
Code:
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: invokestatic #3; //Method whileTest:()J
6: invokevirtual #4; //Method java/io/PrintStream.println:(J)V
9: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
12: invokestatic #5; //Method forTest:()J
15: invokevirtual #4; //Method java/io/PrintStream.println:(J)V
18: return
LineNumberTable:
line 15: 0
line 16: 9
line 18: 18
public static long whileTest();
Code:
0: ldc #6; //int 2147483647
2: istore_0
3: lconst_0
4: lstore_1
5: iload_0
6: iinc 0, -1
9: ifle 20
12: lload_1
13: iload_0
14: i2l
15: ladd
16: lstore_1
17: goto 5
20: lload_1
21: lreturn
LineNumberTable:
line 23: 0
line 24: 3
line 26: 5
line 28: 12
line 31: 20
public static long forTest();
Code:
0: ldc #6; //int 2147483647
2: istore_0
3: lconst_0
4: lstore_1
5: iload_0
6: iinc 0, -1
9: ifle 20
12: lload_1
13: iload_0
14: i2l
15: ladd
16: lstore_1
17: goto 5
20: lload_1
21: lreturn
LineNumberTable:
line 37: 0
line 38: 3
line 40: 5
line 42: 12
line 45: 20
}
输出完成 (耗时 0 秒) - 正常终止
二个函数forTest(),whileTest()分别用于测试for,while性能.
二个函数体都包括迭代次数,保存加法结果,算术求和,返回值四条相同语句,只有循环语句不同.
forTest()中用的for循环,whileTest()中的while循环.
细数forTest()方法,whileTest()方法反编译后所有的指令数,发现:
二者用去的指令数是一样多,都是21条.
由此可知,在Java语言,for,while循环的性能是一样的.
这与大家知道的C语言while循环比for循环执行效率高相悖.
其实,C语言中while循环也并不是千遍一律的比for循环执行效率高.
C语言中,while,for执行效率对比将在下一篇文章通过查看汇编指令指出.
分享到:
相关推荐
控制流语句如if、switch、for、while等用于决定程序执行顺序。异常处理使用try-catch-finally结构,确保程序的健壮性。集合框架包括List、Set、Queue等接口和ArrayList、HashSet、LinkedList等实现类。IO流处理输入...
### C++, Java, Go 等语言性能对比分析 #### 概述 本文档由 Google 工程师 Robert Hundt 编写,旨在通过一种经验报告的形式,对 C++、Java、Go 和 Scala 四种编程语言进行性能比较。本研究关注于不同语言在容器类...
- **流程控制语句**:包括条件语句(`if-else`)、循环语句(`for`, `while`)等,用于控制程序的执行流程。 - **字符串**:介绍字符串类型的使用方法,包括字符串的创建、字符串操作(如连接、截取)等。 - **...
### 数据结构与算法(Java语言版) #### Java与面向对象程序设计 - **Java语言基础知识** - **基本数据类型及运算**:介绍Java中的基本数据类型,包括整型、浮点型、字符型等,并解释了它们之间的运算规则。 - *...
- **流程控制语句**:涵盖条件语句(if-else)、循环语句(while、for)等,用于编写具有逻辑判断和重复执行功能的代码。 - **字符串**:介绍如何在Java中处理字符串,包括字符串的创建、拼接以及常用操作方法。 ...
Lesson1是学习Java的起点,它可能讲解了变量、数据类型、控制流(if语句、for循环、while循环)、方法定义与调用等基础知识。此外,还可能涉及类的创建与实例化,以及如何使用构造函数初始化对象。 而"参考答案与...
- **优点**:C语言执行效率高,对内存管理有直接控制,适合编写系统级和嵌入式程序。 - **关键字和语法**:`main`函数、`for`和`while`循环、指针操作、结构体、数组等。 - **内存管理**:C语言需要手动分配和...
### 数据结构与算法(JAVA语言版):深入解析与实践 #### Java与面向对象程序设计:构建坚实的基础 在《数据结构与算法(JAVA语言版)》一书中,作者首先引领读者进入Java的世界,深入讲解了Java语言的基础知识...
### JAVA_数据结构与算法(JAVA语言版) #### Java与面向对象程序设计 - **Java语言基础知识** - **基本数据类型及运算** - Java支持八种基本数据类型:四种整型(byte、short、int、long)、两种浮点型(float、...
### JAVA语言版数据结构与算法(中文) #### Java与面向对象程序设计 ##### Java语言基础知识 **基本数据类型及运算** - Java支持多种基本数据类型,包括整型(`byte`, `short`, `int`, `long`)、浮点型(`float`,...