++ 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值。
进一步解释
当++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;
尽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
递增,所以现在b
是5
, a
是6
,效果是b = a; a = a + 1;
b = a; a = a + 1;
预增量 : b = ++a;
:首先a
递增,然后结果转换为b
,所以现在a
是7
, b
也是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;