++ Var和Var ++之间的区别

时间:2011-05-30 10:50:46

标签: java operators increment post-increment pre-increment

在编程中,特别是在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) {}

8 个答案:

答案 0 :(得分:116)

tldr;

虽然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递增,现在b5a6效果是b = a; a = a + 1;

预增量b = ++a;:首先增加a,然后将结果转移到b,现在a为{{{ 1}}和7也是b。效果为7

a = a + 1; b = aa++以独立的方式行事。在您提供的循环示例中,增量运算符不在任何表达式中关联,并且是独立的。因此,在这个特定的实现中这两个是相同的。

答案 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)

++varvar++在单独出现在表达式中时是相同的。 这适用于您的问题,因为您独自++ii++

只有当你内联它们时才会发生差异:

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