循环中使用 i++ 和 ++i 哪个更好
先说结论:
循环中使用 i++ 更好!
为什么呢?
我们写个代码做个比较:
两个不一样的for
/**
* test i++ and ++i
*/
public class ForTest {
public static void main(String[] args) {
System.out.print("for i++ : ");
// i++
for (int i = 1; i <= 3; i++) {
System.out.print(i + " ");
}
System.out.println();
System.out.print("for ++i : ");
// ++i
for (int i = 1; i <= 3; ++i) {
System.out.print(i + " ");
}
}
}
输入结果:
其实在这里它的结果是完全一样的
但是不一样的地方是
它的执行方式
我们看他的字节码文件:
看仔细了是不是 两个for的字节码编译之后是一模一样的。
其实经过编译之后,底层帮你把 i++ 改成了 ++i
那我们再写一个输出看看:
/**
* 2
*/
public class ForTest_2 {
public static void main(String[] args) {
int i = 1;
i = i++;
System.out.println(i);
i = ++i;
System.out.println(i);
}
}
输出肯定是 预想中的 1 换行 2
看他编译后的文件:
但是如果真实执行 i++ 的话
其实是经历了 四个步骤
- 先把 i 备份一遍
- 再执行 ++ 操作,这就需要再备份一遍并且 +1
- 然后 把 +1 之后的值赋值给 原本的 i
- 而后,再把之前的备份出来的 i 赋值给 原本的 i
而 执行 ++i 的话 只有三步
- 把 i 备份一遍
- 执行 ++ 操作
- 把增加之后的结果赋值回去
两者相对比:
因为少了一次备份,所以
++i 的性能比 i++ 的要快
当然,这里说的是对于 i 自己本身,如果用于赋值的话,这两者肯定是有区别的
所以在 for 循环中,还是建议使用 ++i 更合适
如果真的要执行 i++ 的时候,这一点点的提升,在大量访问的时候,还是能体现出一点速度区别的。
感谢阅览,有误请指正!