我知道这不是一个逻辑实现,我知道我应该使用前缀++,但我很好奇这个代码:
int a = 1;
a = a++;
Console.Write(a);
Run Code Online (Sandbox Code Playgroud)
我希望结果是2,但事实并非如此.为什么重新开始1?经过a均衡后a,价值a增加了.但似乎++操作在另一个维度执行:)
Chr*_*air 16
把++ 以后的a告诉它返回旧的值,然后递增.同时,递增发生在赋值之前,因此您将丢失旧值.这是等效的代码:
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
Run Code Online (Sandbox Code Playgroud)
所以你可以看到它最终如何,抛弃增加的值.如果在另一方面,你把++ 之前的a:
int a = 1;
a = ++a;
Console.Write(a); //2
Run Code Online (Sandbox Code Playgroud)
它的行为如下:
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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当变量作为表达式的一部分递增时,通常没有意义重新分配变量.只是简单地增加它几乎总是更好:
int a = 1;
a++; //or ++a, but I find a++ is more typical
Console.Write(a); //2
Run Code Online (Sandbox Code Playgroud)
看起来像这样的代码通常更标准,而且不那么令人困惑(正如你已经发现的那样).