java 和 c等作用域问题,循环中重复定义变量

    技术2022-05-20  35

    刚才有人问了一个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已无关系,因此不会有重复定义的问题。


    最新回复(0)