黑马程序员技术交流社区
标题: 这个怎么回事? [打印本页]
作者: 刘琦 时间: 2013-3-13 14:43
标题: 这个怎么回事?
本帖最后由 刘琦 于 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 14:54
j是循环内的局部变量,生命周期在循环内,出了循环就挂了。java在打印的时候都不认识 j
目测这代码编译都通不过。。
作者: HM王琦 时间: 2013-3-13 15:00
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能输出,这里也是不行的。编译都不能通过
作者: 樊其杰 时间: 2013-3-13 15:01
楼主你上面程序 是不是应该是for (j=0;j<10;j++), j是循环体内的局部变量,System.out.println("i="+i+"j="+j);这句根本编译通不过,如果想要得到j 的值 ,可以将j定义为全局变量:- int i =0;
- int j;
- for (j=0;j<10;j++){
- i=i+j;
- }
- System.out.println("i="+i+"j"+j);
- }
复制代码
作者: HM张超 时间: 2013-3-13 15:06
楼上正解,不说代码问题,作用域的理解也有问题!
作者: 黑马17期-闫东东 时间: 2013-3-13 15:43
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
作者: 张雪萍 时间: 2013-3-13 16:28
[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已经在内存中没有了,所以最后也没有结果了
作者: 石伟 时间: 2013-3-13 16:34
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
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);
希望可以帮到你。
作者: 沈子豪 时间: 2013-3-13 19:28
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
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |