已有101人关注
关于局部变量的问题
发表在Java图书答疑 2019-07-23 悬赏:1 学分 《零基础学Java》第6章 面向对象编程基础
是否精华
版块置顶:

我想问一下  方法里的形参如果是引用类型的 那么它是不是局部变量?比如  public void  a(Person p){}  其中p是引用类型 那么方法中的这个引用类型的形参p是不是局部变量?还有出了方法这个p会不会被销毁(垃圾回收)? 谢谢 问题很简单

分享到:
精彩评论 5
根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2019-07-24
沙发

形参叫parameter,是一个名字,一个引用,不占内容空间,占内存空间的是实参,叫argument。实参可能是局部变量,形参连变量都不是。

weikeli19
学分:52 LV3
2019-07-24
板凳

根号申 发表于2019-07-24 08:50

形参叫parameter,是一个名字,一个引用,不占内容空间,占内存空间的是实参,叫argument。实参可能是局部变量,形参连变量都不是。

那么实参传递给形参之后 形参不是就有值了吗  这时候形参变量不就是局部变量了吗 我这样理解对不对 那么出了方法之后  形参变量是不是会被销毁  ? 老师

根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2019-07-24
地板

weikeli19 发表于2019-07-24 10:29

那么实参传递给形参之后 形参不是就有值了吗  这时候形参变量不就是局部变量了吗 我这样理解对不对 那么出了方法之后  形参变量是不是会被销毁  ? 老师

我已经告诉你了,形参连变量都不是,形参使用的值是实参提供的,形参引用的值什么时候被销毁,是由实参的作用域决定的。

根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2019-07-24
4L

image.png

你要是想摸清JVM底层概念,建议去看这本书,可以解答你所有的疑惑。在JVM中,所有的值都只分为局部变量和常量。只要不是常量的量都会保存在栈帧的局部变量表中,包括方法参数。局部变量表保存的都是引用地址,等同于C语言中的指针。栈帧随着方法创建而创建,随着方法结束而销毁。JVM的垃圾回收器GC清理的是堆,也就是具体的数值,没有被任何引用使用的值才会GC被清理。这本书里都有提到,入门书籍简化了很多概念,是为了容易理解,你要是想深究就去看书。

weikeli19
学分:52 LV3
2019-07-24
5L

根号申 发表于2019-07-24 15:14

image.png

你要是想摸清JVM底层概念,建议去看这本书,可以解答你所有的疑惑。在JVM中,所有的值都只分为局部变量和常量。只要不是常量的量都会保存在栈帧的局部变量表中,包括方法参数。局部变量表保存的都是引用地址,等同于C语言中的指针。栈帧随着方法创建而创建,随着方法结束而销毁。JVM的垃圾回收器GC清理的是堆,也就是具体的数值,没有被任何引用使用的值才会GC被清理。这本书里都有提到,入门书籍简化了很多概念,是为了容易理解,你要是想深究就去看书。

好的 老师  谢谢了

首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照