黑马程序员技术交流社区
标题:
关于内存机制,有点模糊.
[打印本页]
作者:
黑马-唐磊
时间:
2012-5-27 14:43
标题:
关于内存机制,有点模糊.
本帖最后由 黑马-唐磊 于 2012-5-27 17:25 编辑
public class Demo {
public static void main(String[] args) {
int result=run();
System.out.println(result);
}
private static int run() {
int num=1;
return num;
//return num++;
}
}
这个简单程序的run方法是先出栈还是先先赋值,能详细说说return num和retuen num++的程序过程,还有在run方法里面的return到底干了哪些事,是让方法出栈吗?如果还返回一个值是直接返回还是将这个值先存放在一个容器里,这个过程是否需要内部的第三方变量来实现
作者:
黑马-唐磊
时间:
2012-5-27 17:27
竟然没人帮我解答,我查阅一些资料和视频稍微理解点,虽然还是理解不透彻但还是有点头绪了,还希望高手们再指点指点,经过我一些整理得出下面答案:这个程序方法是先出栈后赋值,方法出栈了,num就为空了。所以java中的返回值是专门有一个容器来承载的,在run方法里面return其实干了两件事,第一件事是让方法出栈,结束掉,第二件事返回一个值,它首先将那个返回值扔到那个箱子里,然后就让那个方法出栈了,num就没有了,但已经将那个值存放那个箱子里了,然后这个方法就会弹栈,弹栈就会把箱子留下,虚拟机就会把箱子赋值这个result结果,其内部借用第三方变量来实现的。result赋值的值就是run方法返回箱子里的值。所以当返回num是,其结果为1,返回num++结果仍然是1,因为方法结束后不是num给它赋值而是箱子给它赋值,那个箱子里存放的值是1,所以num加上2没关系,结果仍然是1.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2