Why Don't “a=a++” Operation Increase The Value “a”
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
If i == 0, why is (i += i++) == 0 in C#?
我知道这不是逻辑实现,我知道我应该使用prefix+,但我对这段代码很好奇:
1 2 3 | int a = 1; a = a++; Console.Write(a); |
我预计结果是2,但事实并非如此。为什么是结果1?当
把
1 2 3 4 5 | int a = 1; int temp_old_a = a; //temp_old_a is 1 a = temp_old_a + 1; //increments a to 2, this assignment is from the ++ a = temp_old_a; //assigns the old 1 value thus overwriting, this is from your line's assignment `a =` operator Console.Write(a); //1 |
因此,您可以看到它最终如何丢弃递增的值。另一方面,如果你把
1 2 3 | int a = 1; a = ++a; Console.Write(a); //2 |
它的作用是:
1 2 3 4 5 6 | int a = 1; int temp_old_a = a; temp_old_a = temp_old_a + 1; a = temp_old_a; //assigns the incremented value from the ++ a = temp_old_a; //assigns again as per your original line's assignment operator `a =` Console.Write(a); //2 |
在这种情况下,当变量作为表达式的一部分递增时,重新分配变量通常没有意义。只要简单地增加它,你几乎总是会变得更好:
1 2 3 | int a = 1; a++; //or ++a, but I find a++ is more typical Console.Write(a); //2 |
看到这样的代码通常更标准,而且更不容易混淆(如您所发现的)。
另一方面,
因为
1 2 3 | int a=1; a++; Console.Write(a); |
或
1 2 3 | int a = 1; a = ++a; Console.Write(a); |
因为用作后缀的++操作数只在变量值被使用之后才增加变量的值。如果使用++操作数作为前缀,则变量的值将在使用之前递增。
例如:
Case 1: postfix usage
int a = 1;
int b;
b = a++; Case 2: prefix usage
int a = 1;
int b;
b = ++a;
在"情况1"中,B变量的赋值为1,在"情况2"中的赋值为2。
注意:有些语言接受以下语法:
1 | a = ++a |
它会按照您的建议工作,先递增一个,然后返回它:)