此:
int j = 1;
int j = 2;
Console.WriteLine(j.ToString());
..产生编译错误:
已经在此范围内定义了名为“ j”的局部变量
这还可以:
for (int i = 0; i < 10; i++)
{
int j = i;
Console.WriteLine(j.ToString());
}
为什么?
循环如何在每次迭代中同时保留值,同时又能够在相同范围内重新声明具有相同名称的变量?
答案 0 :(得分:3)
变量j
仅在每次迭代中存在,即,在每次迭代中都声明,分配,使用并丢弃变量j
,然后下一次迭代开始,过程重复进行,依此类推。因此,您不会得到与第一个示例代码段相同的编译错误。
答案 1 :(得分:2)
在编写int j=1
和int j=2
时,您正在尝试声明两次变量(只能声明一次)。
但是,您可以覆盖j
的值:
int j = 1; // now j has a value of 1
j = 2; // now j has a value of 2
这就是for
循环的工作-for
循环的每次迭代都会更新该值。每次迭代期间都不会创建j
的新实例。
答案 2 :(得分:1)
在第一个示例中,您要定义两个具有相同名称的变量,并且它们同时存在。
在循环中,每个变量都在循环上下文中创建。每次迭代后,该变量均被销毁,从而允许您创建一个具有相同名称的新变量(在下一次迭代中)。换句话说,在循环中它们不是同时存在的。