刚才有人问了一个java 中类似下面代码为何不会出现重复定义问题
1: for (i = 0; i < 4; i++)
2: {
3: int a = i*4;
4: //other codes
5: }
变量在程序中是有作用域的,在同一个作用域的变量名必须是唯一的,不能重复。这不仅仅是java这样规定的,几乎所有的程序语言都是这样的。而java中作用域在一对{}中。常见的变量作用域的例子有:
1. 类中定义的成员变量整个类中都是可用的。
2. 而方法中定义的变量则一般仅限于包含该变量定义的{}中,即拥有块作用域。
3. for(int i = 0; i< n; i++){…},则i的作用域在整个循环内,函数参数作用域在整个函数。
4. java中内层的变量不能覆盖外层同名变量,而c 中则可以,例如下面代码
1: {
2: int a;
3: }
4: int a;
在c 和java 中都可以编译通过,但是若改为下面代码,
1: int a;
2: {
3: int a;
4: }
在c 中可以编译通过,外层a被内层覆盖,但java中不允许这种覆盖,因此,编译会有错误。
因此,我们可以回答开头的问题:
循环中定义的变量a 的作用域只在循环内部有效,当一轮循环结束时,a 已经被销毁,进入下一轮循环时,定义的a 与上一轮循环中的变量a已无关系,因此不会有重复定义的问题。