你好,我刚刚开始学习Java,现在我正在进行循环语句.我不明白++ i i ++如何在for循环语句中工作.
我的意思是他们如何在数学运算中工作,如加法和减法.我希望有人会向我解释这一点.
Dav*_*one 55
他们都增加了数字.++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
Run Code Online (Sandbox Code Playgroud)
duf*_*ymo 44
这是一个示例类:
public class Increment
{
public static void main(String [] args)
{
for (int i = 0; i < args.length; ++i)
{
System.out.println(args[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我使用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
}
Run Code Online (Sandbox Code Playgroud)
如果我改变循环所以它使用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
}
Run Code Online (Sandbox Code Playgroud)
当我比较两者时,TextPad告诉我两者是相同的.
这说的是从生成的字节代码的角度来看,循环没有区别.在其他情况下,++ i和i ++之间存在差异,但不适用于循环.
Jav*_*ier 21
它们都将变量增加i一.这就像说i = i + 1.差异很微妙.如果你在这样的循环中使用它,那就没有区别了:
for (int i = 0; i < 100; i++) {
}
for (int i = 0; i < 100; ++i) {
}
Run Code Online (Sandbox Code Playgroud)
如果您想了解其中的区别,请查看以下示例:
int a = 0;
int b = a++; // b = 0; a = 1
a = 0;
b = ++a: // b = 1; a = 1
Run Code Online (Sandbox Code Playgroud)
我们的想法是++a递增a并返回该值,同时a++返回一个值,然后递增a.
处理循环的方式如下
1首先,执行初始化(i = 0)
2执行检查(i <n)
3执行循环中的代码.
4值递增
5重复步骤2 - 4
这就是为什么i ++和++ i在已经使用的for循环中没有区别的原因.
所不同的是,递增运算符i++的回报i,因为它是之前递增,且预先递增运算符++i的回报i,因为它是后递增.如果你问一个典型的for循环:
for (i = 0; i < 10; i++)
Run Code Online (Sandbox Code Playgroud)
要么
for (i = 0; i < 10; ++i)
Run Code Online (Sandbox Code Playgroud)
它们完全相同,因为您没有使用i++或++i作为更大表达的一部分.
| 归档时间: |
|
| 查看次数: |
250154 次 |
| 最近记录: |