2

下面的代码给出了一个错误,因为变量 m 被定义了两次。

class one {
   public static void main(String args[]) {
     int m=10;
     int m=10;
   }
 }

但是当声明在循环内完成时,它是可以的,即使m仍然被定义了两次。

 class one {
   public static void main(String args[]) {
     for(int i=1;i<=2;i++) {
       int m=10;
     }
   }
 }

并且编译器不会返回错误消息。
你能解释一下两者之间的区别吗?为什么有时我可以在同一个方法中两次声明同一个变量,有时却不行?

4

6 回答 6

2

对于第一种情况, m 被引用到 main 方法的末尾,因此您不能在同一范围内拥有两个同名的变量。

而在第二种情况下,每次循环执行时,最后一次迭代的 m 不再被引用,因此您可以重新声明并重新初始化它。

于 2012-09-29T17:45:45.383 回答
0

简而言之,您没有在第二个示例中两次声明此变量。}由于变量的生命周期在它被声明的块关闭时结束,当你m在第二次迭代中声明时,第一个是“死的”。这就是为什么您可以循环执行此操作的原因。

在第一个示例中,您在同一代码块中声明了两个具有相同名称的变量,它们应该同时“存在”。这是被禁止的,因为你不能通过写来判断你引用了哪个变量m

于 2014-12-23T15:06:25.593 回答
0

你得到错误是因为你在同一个块(范围)中定义了同一个变量两次。当您在循环内运行时,您会为循环的每次迭代“打开”一个新范围,因此您可以定义一个仅在此范围内可见的变量(尽管在循环外不可见)。例如,如果你写了这样的东西:

class one {    
    public static void main(String args[]) {     
        {
            int m=10;
        }
        {
            int m=10;
        }
    }
}

它本来可以编译得很好,因为同名的变量不共享相同的范围。

于 2012-09-29T17:45:55.307 回答
0

您不能在代码块中多次声明具有相同名称的变量。

在第一种情况下,您在代码块中声明相同的变量,即 main。在第二种情况下,在 for 循环的第一次迭代之后,在第二次迭代中variable m被销毁并重新创建

于 2012-09-29T17:47:58.377 回答
0

它在第一个错误中创建了一个错误,因为您要声明该变量两次。

于 2012-09-29T17:55:07.247 回答
0

-在第一个代码中,您在同一范围内声明了两次 m,并且它一直持续到 main() 方法结束。

-每次loop a primitive int variable m都是用一个值创建的,所以它显然不是问题。

于 2012-09-29T18:35:29.987 回答