黑马程序员技术交流社区

标题: while 与 for 对比区别问题 [打印本页]

作者: 陨落″烟雨。    时间: 2014-2-25 21:10
标题: while 与 for 对比区别问题
.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:定义在主函数里面的变量,是主函数这个类的成员变量,只会随着主函数这个类消失而消失吧?


作者: 陨落″烟雨。    时间: 2014-2-25 21:13
问题2重新描述一下,说错了,是主函数中的成员变量随着主函数的运行结束而释放。
作者: 安辉林    时间: 2014-2-25 23:10
问题一:很明显,先定义的int y=0,然后执行while循环,y变量是定义在循环外的,是一个成员变量,不是局部变量,不会随着while循环的执行完毕而消失
问题二:main函数是随着程序运行加载在栈内存中的,随着程序运行结束而释放
作者: swqsljy    时间: 2014-2-26 14:16
for和while没有太大的区别,
区别在于循环标记上:
while的标记在外部定义,当while循环结束,该变量仍有效,仍存在于内存中,占用内存资源。
for循环定义的变量值在for循环内部有效,随着for循环的结束,变量将会在内存中被释放掉;
所以推荐使用for循环
作者: beat_heart    时间: 2014-2-26 16:37
是呀,我也是这么想的
作者: 陨落″烟雨。    时间: 2014-2-26 18:49
安辉林 发表于 2014-2-25 23:10
问题一:很明显,先定义的int y=0,然后执行while循环,y变量是定义在循环外的,是一个成员变量,不是局部变 ...

谢谢回答!
作者: luoanjade    时间: 2014-2-26 18:56
其实for循环的变量也可以定义在外面的呀!上面你把for循环里面的在for外部定义,并给他初始化,不就跟下面while循环的一样了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2