for循环的效率
2020/09/24
共 421 字
约 1 分钟
归档: 学习
看到很多Leetcode题解的for循环都喜欢用++i,网上查到说是为了提高效率,但是在java中,真的是这样吗?
i与i
对于赋值来说,++ 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循环中他们的效率是一样的(估计是编译器自动优化)
留言