【Java语言】while与for执行效率对比

本文通过对比Java中while与for循环的执行效率,发现两者在指令数量上完全相同,说明在Java中这两种循环的性能并无明显差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java语言】whilefor执行效率对比

 

测试环境(虚拟机版本): 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执行效率对比将在下一篇文章通过查看汇编指令指出.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值