在编程中,特别是在Java中,有什么区别:
int var = 0;
var++;
和
int var = 0;
++var;
这会对for循环产生什么影响?
e.g。
for (int i = 0; i < 10; i++) {}
for (int i = 0; i < 10; ++i) {}
答案 0 :(得分:116)
虽然var++
和++var
都会增加它们应用的变量,但var++
返回的结果是递增前变量的值,而{{1}返回的结果是应用增量后变量的值。
当++var
或++var
形成完整陈述时(如示例所示),两者之间没有区别。例如以下
var++
与
相同int x = 6;
++x;
assert x == 7;
但是,当int x = 6;
x++;
assert x == 7;
或++var
用作较大语句的一部分时,两者可能不等同。例如,以下断言通过
var++
而这一次失败
int x = 6;
assert ++x == 7;
虽然int x = 6;
assert x++ == 7;
和var++
都会增加它们应用的变量,但++var
返回的结果是变量前的变量值,而返回的结果是var++
是应用增量后变量的值。
在++var
循环中使用时,两者之间没有区别,因为变量的增量不构成较大语句的一部分。它可能不会以这种方式出现,因为源文件的同一行上还有其他代码。但是如果你仔细观察,你会发现在增量之前有一个for
,之后没有任何内容,所以增量运算符不构成一个更大的语句的一部分。
答案 1 :(得分:13)
++var
是预增量运算符;在评估表达式之前,它会增加var
的值。同样,var++
是后增量运算符;在评估表达式后,它会增加var
的值。
在简单循环的情况下,两者之间没有区别,因为表达式++var;
和var++;
都会产生相同的结果。
有关详细信息,请参阅示例http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter02/operators.html#IncDecOps。
答案 2 :(得分:11)
int a = 5, b;
提升后:b = a++;
:a
首先转移到b
,然后a
递增,现在b
是5
,a
是6
效果是b = a; a = a + 1;
预增量:b = ++a;
:首先增加a
,然后将结果转移到b
,现在a
为{{{ 1}}和7
也是b
。效果为7
a = a + 1; b = a
和a++
以独立的方式行事。在您提供的循环示例中,增量运算符不在任何表达式中关联,并且是独立的。因此,在这个特定的实现中这两个是相同的。
答案 3 :(得分:6)
在您的示例中,没有区别,但是:
之间存在差异int var = 0;
int var2 = ++var;
和
int var = 0;
int var2 = var++;
在第一种情况下,var2的值为1,而在第二种情况下,它为0。
答案 4 :(得分:5)
var ++在递增之前返回其值 ++ var在递增后返回其值。
int var = 0;
System.out.println(var++); // returns 0;
var = 0;
System.out.println(++var); // returns 1
答案 5 :(得分:0)
++我是preincrement,它在它出现的表达式中的任何内容之前完成。
i ++是postdecrement,它在它出现的表达式中的任何内容之后完成。
在第一个循环中,你将从0到9运行。在第二个循环中,它将从1到9运行。
我的建议:避免它们(例外可能是i ++;或第一个循环)。在表达中寻找过于棘手。
我通过了漫长的一天调试
myArray [(i ++)%16] =数据
并试图找到它为什么试图写入数据[16]有时
答案 6 :(得分:0)
事实上,这很简单。 preincrement ++ i首先在声明中执行。
j = ++i +1;
相当于
i = i+1;
j = i+1;
而后增量i ++在最后执行;
j = i++ +1;
相当于
j = i+1;
i = i+1;
答案 7 :(得分:0)
++var
和var++
在单独出现在表达式中时是相同的。
这适用于您的问题,因为您独自++i
,i++
只有当你内联它们时才会发生差异:
int x = 0;
printf( "%d %d\n", ++x, x ); // 1 1
printf( "%d %d\n", x++, x ); // 1 2
如何记住?
当您首先看到运算符,然后递增,然后再取值。
如果您首先看到变量,则取值,然后再增加。
因此,在第一个示例中,您会看到相同的值,因为:
you increment `x`, then access `x`, then access `x` again
因此,在第二个示例中,您会看到差异,因为:
you access `x`, then increment `x`, then access `x` again