站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题关于变量的声明.

关于变量的声明.

摘要: 关于变量的声明.


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为什么不是重复的?
}
}
}
弱弱的问,谢谢!


while(true){
double a=0;//在这里定义的a为什么不是重复的?
}
是付值操作,又不是定义操作,所以可以了


while(true){
double a=0;//在这里定义的a为什么不是重复的?
}

-- 循环内部是一个逻辑块,相当于一个函数


int a = 0;
int a = 1;
变量a被定义了两次,当然是重复定义拉。
double a = 0;这里变量a只定义了一次,所以不会是重复定义阿。


我想是因为 double a 的作用域是在while循环中。也就是说每次进入while中都将声明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,他和前面定义的那个已经不在了,所以不存在作用域重叠的问题。


楼上已经解释的够清晰了


一生找北 顶你的答案


楼上的楼上的楼上 。。


while(true){
double a=0;//在这里定义的a为什么不是重复的?
}在执行到}后的时候double a的定义域消失,a的这一次生命周期结束,
等再一次的循环时,重新定义,享受一个新的生命周期。
这些类型的定义都由栈来管理的。


up


↑返回目录
前一篇: 用RandomAccessFile处理中文的问题
后一篇: 求简单的JSP实例