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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java8023 中级黑马   /  2015-5-25 17:18  /  1709 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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中,其循环体内的定义的临时变量,每一次循环都会重新定义,一次循环完成就会释放空间。

15 个回复

倒序浏览
还好吧,,,,互相交流哈
回复 使用道具 举报
哥们,你的temp定义在if语句中,没有执行if中的话,你else中的temp哪里来的定义,你要把temp放在if外面,for里面才行
回复 使用道具 举报
变量都有自己的作用范围
回复 使用道具 举报
对,for里面初始化的变量,循环结束,内存就被释放。
回复 使用道具 举报
好透彻,感觉和c里边差不多啊,不太懂
回复 使用道具 举报
l598790586 发表于 2015-5-25 20:39
哥们,你的temp定义在if语句中,没有执行if中的话,你else中的temp哪里来的定义,你要把temp放在if外面,fo ...

怎么会不执行if呢 肯定首先执行if的才会执行后面的,因为肯定首先x==0,第一步必须执行
回复 使用道具 举报
niuapp 发表于 2015-5-26 00:02
好透彻,感觉和c里边差不多啊,不太懂

定义在for循环内部的变量,没运行一次都会进行一次初始化
回复 使用道具 举报
应该是for循环结束后自动释放内存这点比较特殊吧.
回复 使用道具 举报
feng0606 发表于 2015-5-27 00:21
应该是for循环结束后自动释放内存这点比较特殊吧.

嗯就是不过不是循环结束,是每一次循环结束都会释放内存
回复 使用道具 举报
:D
(⊙o⊙)…局部变量的问题么
这东西用栈,方法区 那些乱七八糟的东西来解释比较好,不过我还没弄明白
简单的理解就是每个变量有自己试用区间 跟寿命
for 循环可以看成N个简单方法 ,除了定义在for() 里面的 其他所有在内部定义的变量 只存在一次
if(){} 也是一个简单方法,同样,内部定义变量只存活在这个方法内
回复 使用道具 举报
还好吧,,,,互相交流哈
回复 使用道具 举报
定义的局部变量作用范围就是代码块内
回复 使用道具 举报
lizhi 来自手机 中级黑马 2015-5-27 06:50:04
14#
java8023 发表于 2015-5-25 17:18
java中的for循环和其他语言中for循环很不一样,不知道你发现了吗?下面来看一段代码
/**
测试for循环中 变 ...

只管java,因为只学了java
回复 使用道具 举报
temp因为在if语句块内定义的,它的作用范围只在语句块内
回复 使用道具 举报
这个程序,怎么好像有逻辑错误啊!引用了内存不认识的变量啊!难道其它语言可以认识,未标记的变量?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马