注意!!
在Java中++i 和 i++ 是没有区别的!!! 二者的执行效率是一样的,因为Java编译器会进行编译优化,编译完成之后的代码都会是 ++i
源代码:
编译后代码:
下面我们来理解一下为什么Java编辑器会进行这样的优化
1、语法
for (语句1; 语句2; 语句3) {
//代码块......
}
语句1: 在循环开始前执行
语句2: 定义运行循环的条件
语句3: 在循环已被执行之后执行(虽然++i和i++结果是一样的,但是性能不一样)
2、区别(重点)
虽然++i 和 i++的结果是一样的,都是在代码块执行完成之后才执行语句3,但是二者的性能却有差别,在大量数据的前提下++i的性能要比i++的性能好,原因:
i++是在使用当前值之后再+1,需要创建一个临时的变量来转存,Java代码我们可以理解为:
int temp=i;i=i+1;
++i是直接+1,省去了对内存操作的环节,相对而言能够提高性能,Java代码我们可以理解为:
i=i+1;
3、总结
我们可以看到,在上面两种情况下,经过Java编译器的优化,保持了语义不变,并通过转换语法的形式提高了代码的运行效率。因此我们可以得出结论:
在for循环中,经过JVM编译优化后,不论是i++还是++i,最终执行的方式都是++i,因此执行效率是相同的