以下代码给出了错误,因为变量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;
}
}
}
并且编译器不会回复错误消息 你能解释两者之间的差异吗?为什么有时候我可以在同一个方法中两次声明相同的变量,有时候不是?
答案 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
来判断您引用的变量。