我们在日常写代码或工作中,时常会因为循环条件中的 i++ 和 ++i 的底层逻辑而疑惑,那今天我们就来彻底解决这一问题。
首先来看下面的代码演示:
可以看到,在循环中,无论是 i++ 还是 ++i 二者的运行结果都是一致的;
下面是 二者的字节码文件,查看字节码文件时,发现它们的字节码是一样的:
可见,无论在循环中写 i++ 还是 ++i ,编译的过程中都会被改成 ++i,这是为什么呢?
因为 ++i 的效率要高于 i++;
我们来通过下面案例仔细分析:
相信大家对带有赋值的 i++ 和 ++i 的用法很熟悉,++在前就是先++在赋值,++在后就是下先赋值再++,但我们要讨论的是循环中 i 自身的变化情况;
i++ 或者 ++i 的过程可以理解成值交换的过程,i = ? 的过程可以理解成值存储的过程;
在值交换的过程中,都会先对原来的做一份备份:
- ++在后:先备份,在自增;
- ++在前,先自增,后备份;
详细过程见图解:
由此可见:i++ 需要4步来完成,++i 只需要两步,因此 ++i 的效率高于 i++;