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

在编程方面,特别是在Java中,有什么区别:

int var = 0; var++; 

 int var = 0; ++var; 

这对循环会有什么影响?

例如

 for (int i = 0; i < 10; i++) {} for (int i = 0; i < 10; ++i) {} 

tldr;

尽pipevar++++var增加了它们应用的variables, var++返回的结果是variables前的值,而++var返回的结果是应用增量后的variables值。

进一步解释

++varvar++形成一个完整的语句(如你的例子),两者之间没有区别。 例如以下

 int x = 6; ++x; assert x == 7; 

是相同的

 int x = 6; x++; assert x == 7; 

但是,当++varvar++被用作更大语句的一部分时,这两者可能不等价。 例如,下面的断言通过

 int x = 6; assert ++x == 7; 

而这一个失败

 int x = 6; assert x++ == 7; 

尽pipevar++++var增加了它们应用的variables, var++返回的结果是variables前的值,而++var返回的结果是应用增量后的variables值。

for循环中使用时,两者之间没有区别,因为variables的增量不构成较大语句的一部分。 它可能不会以这种方式出现,因为源文件的同一行上有其他代码。 但是如果仔细观察,你会看到有一个; 紧接在增量之前,之后什么都没有,所以增量操作符不构成更大声明的一部分。

++var是预增加运算符; 它评估expression式之前递增var的值。 同样, var++是后增加的运算符; 它评估expression式之后递增var的值。

在简单循环的情况下,两者之间没有区别,因为expression式++var;var++; 两者都产生相同的结果。

欲了解更多信息,请参阅http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter02/operators.html#IncDecOps

int a = 5, b;

后增量b = a++;a先转移到b然后a递增,所以现在b5a6 ,效果是b = a; a = a + 1; b = a; a = a + 1;

预增量b = ++a; :首先a递增,然后结果转换为b ,所以现在a7b也是7 。 效果是a = a + 1; b = a a = a + 1; b = a

a++++a独立的行为方式类似。 在你提出的循环例子中,增量运算符在任何expression式中都没有关联,并且是独立的。 所以在这个特定的实现中这两个是相同的。

在你的例子中,没有什么区别,但是有以下的区别:

 int var = 0; int var2 = ++var; 

和:

 int var = 0; int var2 = var++; 

在第一种情况下,var2的值是1,而在第二种情况下,它的值是0。

var ++在递增之前返回它的值。
++ var在递增之后返回它的值。

 int var = 0; System.out.println(var++); // returns 0; var = 0; System.out.println(++var); // returns 1 

++我是preincrement,它是在它出现的expression式之前完成的。

我++是postdecrement,它是在它出现的expression式中的任何东西之后完成的。

在第一个循环中,你将运行从0到9.在第二个,它将运行从1到9。

我的build议:避免这两个(例外可能是我++;或第一个循环)。 在expression式中寻找太棘手。

我经过了漫长的一天debugging

myArray [(i ++)%16] =数据

并试图find它为什么试图写入数据[16]有时

其实这很简单。 preincrement ++ i在语句中首先执行。

 j = ++i +1; 

相当于

 i = i+1; j = i+1; 

而后增量i ++在最后执行;

 j = i++ +1; 

相当于

 j = i+1; i = i+1;