黑马程序员技术交流社区

标题: 关于内存机制,有点模糊. [打印本页]

作者: 黑马-唐磊    时间: 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