public class Test{
public void A(){
int a=0;
....
int a=1; //重复定义变量a, 出错
}
}但是如果:
public class Test{
public void A(){
while(true){
double a=0;//在这里定义的a为什么不是重复的?
}
}
}
弱弱的问,谢谢!
public void A(){
int a=0;
....
int a=1; //重复定义变量a, 出错
}
}但是如果:
public class Test{
public void A(){
while(true){
double a=0;//在这里定义的a为什么不是重复的?
}
}
}
弱弱的问,谢谢!
double a=0;//在这里定义的a为什么不是重复的?
}
是付值操作,又不是定义操作,所以可以了
double a=0;//在这里定义的a为什么不是重复的?
}-- 循环内部是一个逻辑块,相当于一个函数
int a = 1;
变量a被定义了两次,当然是重复定义拉。
double a = 0;这里变量a只定义了一次,所以不会是重复定义阿。
你的int a = 0;的作用域是A()。int a = 1;
的作用域也是A(),他们的作用域相同,所以是重复定义。
重复定义还有一种形式。
public void a() {
int a = 0;
if (true) {
int a =1;
}
}
这里第一次定义的a的作用域比第二次定义的作用域要大,但是在if块中,他们的
作用域是重叠的,所以也是重复定义。
至于说while(true){
double a=0;//在这里定义的a为什么不是重复的?
}
这里确实定义了很多的变量a,因为while是无限循环,但是每一次循环结束后定义的变量
就超出了他的作用域因此会被回收,下一个循环又定义一个新的变量a,他和前面定义的那个已经不在了,所以不存在作用域重叠的问题。
double a=0;//在这里定义的a为什么不是重复的?
}在执行到}后的时候double a的定义域消失,a的这一次生命周期结束,
等再一次的循环时,重新定义,享受一个新的生命周期。
这些类型的定义都由栈来管理的。