for循环中的i++和++i有什么区别

      最近看一些别人的源码,发现很多人使用for循环都会这么写:

for(int i=0; i<***; ++i)

      首先,在for循环中的i++和++i其效果是一样的,这里不予证明。

      自己写了这么多年的程序,第一次见到这种写法,只能说自己孤陋寡闻了。赶紧到网上查了下,2种写法的运行时间是有差别,因为“Java中i++语句是需要一个临时变量取存储返回自增前的值,而++i不需要。这样就导致使用i++时系统需要先申请一段内存空间,然后将值赛如进去,最后不用了才去释放。”为了证明一下此番言论的正确性,于是写了一些测试代码。

 

1、先来个时间短一点的:

public static void testForI() throws InterruptedException{
		long startTime = System.currentTimeMillis();
		for(int i=0; i<10000; i++){
			System.out.print(i);
		}
		System.out.println();
		long endTime = System.currentTimeMillis();
		long usse1 = endTime-startTime;
		startTime = endTime;
		for(int i=0; i<10000; ++i){
			System.out.print(i);
		}
		System.out.println();
		endTime = System.currentTimeMillis();
		long usse2 = endTime-startTime;
		System.out.println("耗时1:"+usse1);
		System.out.println("耗时2:"+usse2);
	}

多次测试结果:

有一定的随机性,间隔时间相关不大,但基本上第二循环会比较节约时间。

2、增加循环次数:

多次测试结果:

可以看到,第二次循环依然会比较节约时间。

3、来个时间更长一点的测试:

public static void testForI() throws InterruptedException{
		long startTime = System.currentTimeMillis();
		for(int i=0; i<100000; i++){
			Thread.sleep(1);
		}
		long endTime = System.currentTimeMillis();
		long usse1 = endTime-startTime;
		startTime = endTime;
		System.out.println("耗时1:"+usse1);
		for(int i=0; i<100000; ++i){
			Thread.sleep(1);
		}
		endTime = System.currentTimeMillis();
		long usse2 = endTime-startTime;
		System.out.println("耗时2:"+usse2);
	}

运行结果:

      以上测试基本能证明网上比较一致的结论。

      但是对于我们平时写的循环,一般循环次数较小,在时间消耗上基本不会有太多的差异,但更加重要的一点是“使用i++时系统需要先申请一段内存空间”,也就是说理论上使用i++会占用更多的内存。

      当然,对于这种对于时间、空间都存在一丁点儿的差异的优化,见仁见智,喜欢怎么写就怎么写咯。

 

 

 

 

 

  • 14
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值