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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘琦 中级黑马   /  2013-3-13 14:43  /  1898 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘琦 于 2013-3-13 20:35 编辑

int i =0;
for (j=0;j<10;j++){
  i=i+j;

}
System.out.println("i="+i+"j="+j);
这个程序里面j无法输出,是因为j只在循环体内有效,那为什么i就可以输出呢?而且是计算后的结果,无法j都无法从循环内跳出返回数据,为什么i就可以返回计算的结构,而不是外面的初始化0呢?这个i和j到底是怎么存储呢?

点评

如果问题解决了,请尽快将帖子分类改为已解决,谢谢  发表于 2013-3-13 18:29

评分

参与人数 1黑马币 +9 收起 理由
黄玉昆 + 9 你代码写错了,我帮你吧int改为for了.

查看全部评分

9 个回复

倒序浏览
j是循环内的局部变量,生命周期在循环内,出了循环就挂了。java在打印的时候都不认识 j
目测这代码编译都通不过。。
回复 使用道具 举报
int i =0;
int (j=0;j<10;j++){  //确定你这里没有什么问题吗?应该是for(int j=0;j<10;j++)
  i=i+j;

}
System.out.println("i="+i+"j="+j);//j是在for循环的局部,属于局部变量,如果你打印System.out.println(j);是打印不出来的,因为j无法访问。
你说i能输出,这里也是不行的。编译都不能通过
回复 使用道具 举报
楼主你上面程序 是不是应该是for (j=0;j<10;j++), j是循环体内的局部变量,System.out.println("i="+i+"j="+j);这句根本编译通不过,如果想要得到j 的值 ,可以将j定义为全局变量:
  1.         int i =0;
  2.         int j;
  3.         for (j=0;j<10;j++){
  4.           i=i+j;
  5.         }
  6.         System.out.println("i="+i+"j"+j);
  7.     }
复制代码
回复 使用道具 举报
楼上正解,不说代码问题,作用域的理解也有问题!
回复 使用道具 举报
int i =0;
for(int j=0;j<10;j++)
{  
  i=i+j;
}
System.out.println("i="+i+"j="+j);//报错Unresolved compilation problem: j cannot be resolved to a variable

        }
J是局部变量,在循环内有效,出循环,就不存在了,  i是个成员变量,打印i=45

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
[code]int i =0;
for(int j=0;j<10;j++)
{  
  i=i+j;
}
System.out.println("i="+i+"j="+j);[code]
要注意变量的种类,i是一个全局变量,他的生命周期随着函数的小时而消失,
j是局部变量,只在这个for循环中分配内存,一旦循环结束,随之相应内存也会消失。所以运行到最后的打印时,j已经在内存中没有了,所以最后也没有结果了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
石伟 中级黑马 2013-3-13 16:34:29
8#
     

         int i =0;

        for (int j=0;j<10;j++)
        {

                 i=i+j;

        }

        System.out.println("i="+i+"j"+j);

打印不出来j,编译会出错,因为j是局部变量!
为什么能打印出来i,因为i是全局变量,经过for循环之后,i的值变成了45,必须没问题


如果想打印j,只能把j定义为全局变量,或者在for循环内部打印j
回复 使用道具 举报
樊玲 中级黑马 2013-3-13 16:35:49
9#

int i =0;                       //i是成员变量。被放在堆里。如果栈指向对象的引用为null,系统会定时进行垃圾清理。
for (j=0;j<10;j++){     //这里j是局部变量。所谓局部变量,会放在栈内存中。随着方法,或者循环体执行完,就会释放。意思就是这里,for循环一结束,j就被释放了。没有                                
                               //了,所以后面是输出j是输出不来的。
  i=i+j;

}
System.out.println("i="+i+"j="+j);

希望可以帮到你。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报

int i =0;
for(int j=0;j<10;j++)
{  
  i=i+j;
}
System.out.println("i="+i+"j="+j)
上面的i是成员变量,是存储在堆内存中的,而j是局部变量是存储在栈内存中的,最终的结果是无法编译的.两者的生命周期不同,成员变量的生命周期比局部变量长,在JAVA中对于这个局部变量的进入和弹出有专业的描述词为"进栈和弹栈",J在这个循环体中出来后就直接弹栈了被当做垃圾释放了,所以根本没办法找到J
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马