【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执行效率对比将在下一篇文章通过查看汇编指令指出.
分享到:
相关推荐
for、while、do-while循环的使用。包括循环结构的4个要素,一级介绍do-while循环结构
[第2讲]ST语言基本操作(For循环与While循环)-其他语言编程flv,[第2讲]ST语言基本操作(For循环与While循环)-其他语言编程。查看更多
41.java中while循环.zip41.java中while循环.zip41.java中while循环.zip41.java中while循环.zip41.java中while循环.zip41.java中while循环.zip41.java中while循环.zip41.java中while循环.zip41.java中while循环.zip41...
JAVA 中while和do while区别
包括while循环、do-while循环、 for循环、嵌套循环、求最大公约数、计算销售额、显示数字构成的金字塔、关键字break和continue、语句标号以及利用标号中止循环(可选)、显示素数(可选) 。
目录第1章 Java语言基础知识 1.1 Java语言与面向对象的程序设计 1.1.1 面向对象的程序设计思想 1.1.2 Java语言的特点 1.1.3 Java类库 1.2 Java程序概述 1.2.1 Java开发环境 1.2.2 Application举例 1.2.3 ...
简单的理解for,while,do while的区别
Java实验-循环语句,for,while,do-while
B.while循环比 do…while循环执行效率高 C.while循环是先循环后判断,所以循环体至少被执行一次 D.do…while循环是先循环后判断,所以循环体至少被执行一次 3.关于 for循环和 while循环的说法哪个正确? ( ...
关于while do与for finish语句编译的扩充
Java中while循环语句实例.pdf 学习资料 复习资料 教学资源
自1995年首次发布以来,Java编程语言作为一种教学语言变得日益重要,现在已经成为初级计算课程斯坦福大学的标准语言。Java语言可以让学生编写高度交互式程序,这充分激发了他们的学习兴趣。但Java语言很复杂,老师和...
Java语言编码规范 1 介绍(INTRODUCTION) 3 1.1 为什么要有编码规范(WHY HAVE CODE CONVENTIONS) 3 1.2 版权声明(ACKNOWLEDGMENTS) 3 2 文件名(FILE NAMES) 4 2.1 文件后缀(FILE SUFFIXES) 4 2.2 常用文件名(COMMON ...
java语言程序设计课后答案 作业参考答案 习题一 4、如何建立和运行Java程序, 首先启动文本编辑器,如记事本、UltraEdit等,编辑程序代码,并以.Java作为文件 扩展名保存程序源代码;然后进入dos环境利用javac编译源...
java 数组、for循环、dowhile 实例代码
Java循环结构for语句while语句详解_Java教程共2页.pdf.zip
在VS2010、Keil、IAR平台下从汇编角度分析了for和while循环的效率
(2)apply函数族和泛型函数map能够更加高效简洁地实现一般的for循环、while循环,但这不代表for循环、while循环就没用了,它们可以在更高的层次使用(相对于在逐元素级别使用) 1. 基本for循环 例如,有如下的...
编译原理课程设计,是对PL0语言的扩充。 主要包括if-then-else,do-while-until,for 资源里有我写的报告和源码,c++实现。 需要自己运行测试
30道java练习题,包括for循环练习题,do...while练习题,switch...case练习题等...