for 循环中的 i++ 和 ++i 有什么区别?
我刚刚开始学习Java,现在我进入了for循环语句。我不明白如何在for循环中工作。++i
i++
它们在加法和减法等数学运算中是如何工作的?
我刚刚开始学习Java,现在我进入了for循环语句。我不明白如何在for循环中工作。++i
i++
它们在加法和减法等数学运算中是如何工作的?
它们都会增加数字。 等效于 。++i
i = i + 1
i++
并且非常相似但不完全相同。两者都递增数字,但在计算当前表达式之前递增数字,而在计算表达式后递增数字。++i
++i
i++
int i = 3;
int a = i++; // a = 3, i = 4
int b = ++a; // b = 4, a = 4
下面是一个示例类:
public class Increment
{
public static void main(String [] args)
{
for (int i = 0; i < args.length; ++i)
{
System.out.println(args[i]);
}
}
}
如果我使用javap反汇编这个类.exe我得到这个:
Compiled from "Increment.java"
public class Increment extends java.lang.Object{
public Increment();
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
1: istore_1
2: iload_1
3: aload_0
4: arraylength
5: if_icmpge 23
8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
11: aload_0
12: iload_1
13: aaload
14: invokevirtual #3; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
17: iinc 1, 1
20: goto 2
23: return
}
如果我改变循环,使它使用i ++并再次反汇编,我得到这个:
Compiled from "Increment.java"
public class Increment extends java.lang.Object{
public Increment();
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
1: istore_1
2: iload_1
3: aload_0
4: arraylength
5: if_icmpge 23
8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
11: aload_0
12: iload_1
13: aaload
14: invokevirtual #3; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
17: iinc 1, 1
20: goto 2
23: return
}
当我比较两者时,TextPad告诉我两者是相同的。
这说明,从生成的字节码的角度来看,循环中没有区别。在其他上下文中,++i 和 i++ 之间存在差异,但对于循环则没有差异。