for循环的效率

2020/09/24
共 421 字
约 1 分钟
归档: 学习
标签: java基础

看到很多Leetcode题解的for循环都喜欢用++i,网上查到说是为了提高效率,但是在java中,真的是这样吗?


ii

对于赋值来说,++ i 是先加后赋值;i ++ 是先赋值后加,都分两部来完成。对于for循环来说,就循环体内的结果而言是一样的,而对于i的自增效率来说,是不是真的不一样,分析下字节码就可以知道了。

准备以下例子用于测试,

public class test2 {
    public static void main(String[] args) {
        for (int i = 0;i < 10;i++){

        }
    }
}

用javap -c反汇编生成的test2.class,再把i改成i,结果发现他们的字节码是一样的:

Compiled from "test2.java"
public class someTest.test2 {
  public someTest.test2();
    Code:
       0: aload_0
       1: invokespecial #1// Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: iconst_0  //将int类型常量0压入操作数栈(栈顶)
       1: istore_1  //将int类型值存入局部变量1(这里是i)
       2: iload_1   //从局部变量1中装载int类型值(将i的值装载到操作数栈中)
       3: bipush        10    //将一个8位带符号整数(10)压入栈
       5: if_icmpge     14    //把2和3的值进行比较,条件成立则跳去步骤14(跳出循环)
       8: iinc          1, 1  //局部变量自增,第1个为局部变量表的位置,第2个为累加数
      11: goto          2    //无条件跳转到步骤2
      14: return
}

所以至少在java中,无论是i还是i,for循环中他们的效率是一样的(估计是编译器自动优化)

留言

本站已运行
© 2024 Jack  由 Hexo 驱动
目录

  1. 1. i与i
复制成功