以下是亲测:
C#代码如下,正常编译通过,与Java无区别
using System; namespace Wrox.ProCSharp.Basics { public class ScopeTest { public static int Main() { for (int i = 0; i < 10; i++) { Console.WriteLine(i); } // i在这里超出范围。 for (int i = 9; i >= 0; i--) { Console.WriteLine(i); } // i在这里超出范围。 return 0; } } }
java代码如下,均可以正常编译
public static void main(String[] args) { for (int i = 0; i < 9; i++) { System.out.println(i); } for (int i = 9; i >= 0; i--) { System.out.println(i); } }
C#代码如下不能正常编译:
using System; namespace Wrox.ProCSharp.Basics { public class ScopeTest { public static int Main() { for (int i = 0; i < 10; i++) { Console.WriteLine(i); } // i在这里超出范围。 int i=3; Console.ReadLine(); return 0; } } }
编译出错,见下图:
java代码正常编译通过
public static void main(String[] args) { for (int i = 0; i < 9; i++) { System.out.println(i); } int i=3; System.out.println(i); }
C#和Java中,for、while或类似语句中声明的局部变量都存在于循环体内
C#中出了循环体外之后可以再次声明一个不在同一作用域的同名的局部变量,而Java中是可以再次在局部变量之外声明同名的局部变量的!(表述有点绕口,大家看实例懂的就好)