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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陨落″烟雨。 中级黑马   /  2014-2-25 21:10  /  1146 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

.for与while的区别

本来一直以为for和while没有太大的区别,今天看了毕老师的视频才恍然大悟,for循环定义的变量值只在for循环内部有效,随着for循环的结束,变量将会在内存中被释放掉;



[java] view plaincopy

public class Sentence {  
  
    public static void main(String[] args) {  
       for(int x=0;x<3;x++){  
           System.out.println(x);  
       }  
        System.out.println(x); // 编译失败,for循环结束后x在内存中被释放掉  
   }      
}  
while循环定义的变量在while循环的外部有效,不随着while循环的结束被释放  可以正常的编译并运行处结果。

[java] view plaincopy

public class Sentence {  
    public static void main(String[] args) {        
        int y =0;  
        while(y<3){  
            System.out.println(y);  
            y++;  
        }  
        System.out.println(y);   //正常编译并可以运行出结果  
    }  
}  






      上面是看到的一个兄弟的笔记总结,他上面的while语句定义的变量int y ; ,是定义在while循环外面的,当然不会随着while循环而消失,for循环中的int x 是定义在for循环中的,就是局部变量,肯定会随着for循环运行完后出栈。

问题1:“while循环定义的变量在while循环的外部有效,不随着while循环的结束被释放”这句话变量根本就没在while循环里面定义呀。。是吧??

问题2:定义在主函数里面的变量,是主函数这个类的成员变量,只会随着主函数这个类消失而消失吧?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

6 个回复

倒序浏览
问题2重新描述一下,说错了,是主函数中的成员变量随着主函数的运行结束而释放。
回复 使用道具 举报
问题一:很明显,先定义的int y=0,然后执行while循环,y变量是定义在循环外的,是一个成员变量,不是局部变量,不会随着while循环的执行完毕而消失
问题二:main函数是随着程序运行加载在栈内存中的,随着程序运行结束而释放

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
for和while没有太大的区别,
区别在于循环标记上:
while的标记在外部定义,当while循环结束,该变量仍有效,仍存在于内存中,占用内存资源。
for循环定义的变量值在for循环内部有效,随着for循环的结束,变量将会在内存中被释放掉;
所以推荐使用for循环

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
是呀,我也是这么想的
回复 使用道具 举报
安辉林 发表于 2014-2-25 23:10
问题一:很明显,先定义的int y=0,然后执行while循环,y变量是定义在循环外的,是一个成员变量,不是局部变 ...

谢谢回答!
回复 使用道具 举报
其实for循环的变量也可以定义在外面的呀!上面你把for循环里面的在for外部定义,并给他初始化,不就跟下面while循环的一样了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马