黑马程序员技术交流社区

标题: java中for循环很是特别啊 [打印本页]

作者: java8023    时间: 2015-5-25 17:18
标题: java中for循环很是特别啊
java中的for循环和其他语言中for循环很不一样,不知道你发现了吗?下面来看一段代码
/**
测试for循环中 变量重新初始化的原理,可以被重复初始哈很是奇怪啊!!!
*/

class ForTest
{
    public static void main(String[] args){
        for(int x=0;x<5;x++){
              if (x==0)
              {
                        int temp=x;
                        System.out.println("temp="+temp);
               }else{
                      //System.out.println("temp="+temp); //看来是必须先定义才可以啊
                         int temp=x;
                         System.out.println("temp="+temp);
                }
                   //System.out.println("temp="+temp); //变量的作用域有限
             }
      }
}
对于循环体中的定义的变量,java语言会在每一次开始循环的时候为其分配内存地址,但是一旦此次结束就会释放内存。你看本案例中就是。看临时变量temp
在第一次循环的时候,必须首先进行初始化定义,这是必须的;但是呢,第二次循环的时候呢,执行else语句中的内容的时候,若是首先执行叔叔语句的话,输出语句中包含有temp变量,就会发生编译错误。有此可以说了:for循环在java中,其循环体内的定义的临时变量,每一次循环都会重新定义,一次循环完成就会释放空间。


作者: 赵龙    时间: 2015-5-25 19:40
还好吧,,,,互相交流哈
作者: l598790586    时间: 2015-5-25 20:39
哥们,你的temp定义在if语句中,没有执行if中的话,你else中的temp哪里来的定义,你要把temp放在if外面,for里面才行
作者: 流水0215    时间: 2015-5-25 21:29
变量都有自己的作用范围
作者: 小水    时间: 2015-5-25 23:11
对,for里面初始化的变量,循环结束,内存就被释放。
作者: niuapp    时间: 2015-5-26 00:02
好透彻,感觉和c里边差不多啊,不太懂
作者: java8023    时间: 2015-5-27 00:08
l598790586 发表于 2015-5-25 20:39
哥们,你的temp定义在if语句中,没有执行if中的话,你else中的temp哪里来的定义,你要把temp放在if外面,fo ...

怎么会不执行if呢 肯定首先执行if的才会执行后面的,因为肯定首先x==0,第一步必须执行
作者: java8023    时间: 2015-5-27 00:10
niuapp 发表于 2015-5-26 00:02
好透彻,感觉和c里边差不多啊,不太懂

定义在for循环内部的变量,没运行一次都会进行一次初始化
作者: feng0606    时间: 2015-5-27 00:21
应该是for循环结束后自动释放内存这点比较特殊吧.
作者: java8023    时间: 2015-5-27 00:24
feng0606 发表于 2015-5-27 00:21
应该是for循环结束后自动释放内存这点比较特殊吧.

嗯就是不过不是循环结束,是每一次循环结束都会释放内存
作者: 微凉的暮色    时间: 2015-5-27 00:41
:D
(⊙o⊙)…局部变量的问题么
这东西用栈,方法区 那些乱七八糟的东西来解释比较好,不过我还没弄明白
简单的理解就是每个变量有自己试用区间 跟寿命
for 循环可以看成N个简单方法 ,除了定义在for() 里面的 其他所有在内部定义的变量 只存在一次
if(){} 也是一个简单方法,同样,内部定义变量只存活在这个方法内

作者: jakemind    时间: 2015-5-27 00:52
还好吧,,,,互相交流哈
作者: 黑马飞    时间: 2015-5-27 06:47
定义的局部变量作用范围就是代码块内
作者: lizhi    时间: 2015-5-27 06:50
java8023 发表于 2015-5-25 17:18
java中的for循环和其他语言中for循环很不一样,不知道你发现了吗?下面来看一段代码
/**
测试for循环中 变 ...

只管java,因为只学了java
作者: mmakun    时间: 2015-5-27 08:31
temp因为在if语句块内定义的,它的作用范围只在语句块内
作者: kmlitheima    时间: 2015-5-27 10:23
这个程序,怎么好像有逻辑错误啊!引用了内存不认识的变量啊!难道其它语言可以认识,未标记的变量?




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