A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张文兵 初级黑马   /  2012-6-10 02:32  /  1666 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

for语句前定义了i,for语句()和{}里都不能够重复用了吗?为什么呢?我记得好像是可以着。for语句里的是局部变量,那么i就可以在for语句后面用了,这样理解对吗?[code=java]int i=8;               
                for (int j=0;j<=1;j++ )
                {
                        //int i=8;
                        System.out.println(i);
                }               
                int i=9;[/

3 个回复

倒序浏览
首先你要明白:main方法也是一个方法,如果你把int i=8; 定义在main方法中它也属于局部变量,它的作用于是整个main方法内部,如果你在for循环里面又定义了类似于 for (int i=0;i<=1;i++ )的话,那么当然是变量重复了。 for语句()和{}里都不能够重复用了吗?这个是可以重复用的但是不能重复定义 例如for(i=0;i<=1;i++ )这样子还可以用但是不能在前面再加 int  加了就成了重复定义了
如果你把int i=8; 定义在成员变量中就ok了,你的  int i=8和int i=9;是在同一个范围内就会报错
代码如下
public class Test {
        int i=8;                 
        public static void main(String[] args) {
                int j = 0;
        for (int i=0;i<=1;i++ )
        {
                //int i=8;
                System.out.println(i);
        }                 
        int i=9;
        }
}
回复 使用道具 举报
本帖最后由 邵阳 于 2012-6-10 08:27 编辑

一、自己的作用域,对于for来讲,如果将用于控制循环的增量定义在for语句中,那么该变量值在for语句内有效,for语句执行完毕,该变量在内存中被释放。
二、所以在for循环外有可以定义相同的变量,而不会出错。因为在for执行完之后变量在内存中已经被释放。
for (int j=0;j<=1;j++ )
                {
                        //int i=8;         
                        System.out.println(i);
                }               
                int i=9;        这个是可以的
回复 使用道具 举报
你这样定义完全没有问题啊!编译以及运行都不会报错,只是我们平时在写的时候不会把这些变量同时命名为i,这样的话阅读性太差了。只有在了解作用域的时候我们一般用同一个变量名来做试验。那么你就应该明确作用域的问题了。
你这第一个i在申明时(即i=8)是定义的成员变量,他是存放在对内存中的,作用于整个类中。你for循环中的变量i是存放在静态区的,只作用在for循环内部,如果for循环结束则i被回收,第三个i(i=9)是定义在函数里面的,存放在栈内存中,作用域整个函数。因此这三个变量的存储位置不同,导致这三个变量可以按照你说的这样定义。
但是正如我所说,阅读性太差,实际开发中不建议这样定义。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马