i ++和++ i for for循环(Java)有什么区别?
可能重复:
循环中i ++和++ i之间的区别?
java中的x ++和++ x有区别吗?
你好,我刚刚开始学习Java,现在我正在进行循环语句。 我不明白++ i i ++如何在for循环语句中工作。
我的意思是他们如何在数学运算中工作,如加法和减法。 我希望有人会向我解释这一点。
他们都增加了数字。 ++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."":()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."":()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 ++之间存在差异,但不适用于循环。
它们都将变量i
增加1。 这就像说i = i + 1
。 差异很微妙。 如果你在这样的循环中使用它,那没有区别:
for (int i = 0; i < 100; i++) { } for (int i = 0; i < 100; ++i) { }
如果您想了解其中的区别,请查看以下示例:
int a = 0; int b = a++; // b = 0; a = 1 a = 0; b = ++a: // b = 1; a = 1
这个想法是++a
递增a
并返回该值,而a++
返回a的值然后递增a
。
处理循环的方式如下
1首先,执行初始化(i = 0)
2执行检查(i 3执行循环中的代码。 4值递增 5重复步骤2 – 4 这就是为什么i ++和++ i在已经使用的for循环中没有区别的原因。
不同之处在于后递增运算符i++
在递增之前返回i
,并且预递增运算符++i
在递增之后返回i
。 如果你问一个典型的for
循环:
for (i = 0; i < 10; i++)
要么
for (i = 0; i < 10; ++i)
它们完全相同,因为你没有使用i++
或++i
作为更大表达式的一部分。
i++
和++i
都是i = i + 1
简写。
除了更改i的值之外,它们还会在添加一个( i++
)之前或添加一个( ++i
)之后返回i的值。
在循环中,第三个组件是在每次迭代后执行的一段代码。
for (int i=0; i<10; i++)
不使用该部分的值,因此上述内容与之相同
for(int i=0; i<10; i = i+1)
要么
for(int i=0; i<10; ++i)
在这些情况下,它有所不同(在i++
和++i
)
while(i++ < 10) for (int i=0; i++ < 10; )
JLS§14.14.1, Statement的基础 ,清楚地表明了ForUpdate表达式的计算和丢弃的值。 效果是在for
语句的上下文中使两个表单相同。