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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-唐磊 中级黑马   /  2012-5-27 14:43  /  1942 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-唐磊 于 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到底干了哪些事,是让方法出栈吗?如果还返回一个值是直接返回还是将这个值先存放在一个容器里,这个过程是否需要内部的第三方变量来实现

1 个回复

正序浏览
竟然没人帮我解答,我查阅一些资料和视频稍微理解点,虽然还是理解不透彻但还是有点头绪了,还希望高手们再指点指点,经过我一些整理得出下面答案:这个程序方法是先出栈后赋值,方法出栈了,num就为空了。所以java中的返回值是专门有一个容器来承载的,在run方法里面return其实干了两件事,第一件事是让方法出栈,结束掉,第二件事返回一个值,它首先将那个返回值扔到那个箱子里,然后就让那个方法出栈了,num就没有了,但已经将那个值存放那个箱子里了,然后这个方法就会弹栈,弹栈就会把箱子留下,虚拟机就会把箱子赋值这个result结果,其内部借用第三方变量来实现的。result赋值的值就是run方法返回箱子里的值。所以当返回num是,其结果为1,返回num++结果仍然是1,因为方法结束后不是num给它赋值而是箱子给它赋值,那个箱子里存放的值是1,所以num加上2没关系,结果仍然是1.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马