循环内变量的声明与同一变量名的多个声明

时间:2012-09-29 17:38:14

标签: java variables scope syntax-error

以下代码给出了错误,因为变量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;
     }
   }
 }

并且编译器不会回复错误消息 你能解释两者之间的差异吗?为什么有时候我可以在同一个方法中两次声明相同的变量,有时候不是?

6 个答案:

答案 0 :(得分:2)

对于第一种情况,引用m直到main方法结束,因此在同一范围内不能有两个相同名称的变量。

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

- loop 每次 primitive int variable m 使用值创建时,显然很明显不是问题。

答案 5 :(得分:0)

简单来说,在第二个示例中,您没有两次声明此变量。由于变量生命周期在声明它的块的结束}结束,所以当你在第二次迭代中声明m时,第一个就是#34;死了#34;。这就是你可以循环完成的原因。

在第一个例子中,你在同一个代码块中声明了两个具有相同名称的变量,它们应该是&#34; live&#34;同时。这是禁止的,因为您无法通过编写m来判断您引用的变量。