我想问一下 方法里的形参如果是引用类型的 那么它是不是局部变量?比如 public void a(Person p){} 其中p是引用类型 那么方法中的这个引用类型的形参p是不是局部变量?还有出了方法这个p会不会被销毁(垃圾回收)? 谢谢 问题很简单
形参叫parameter,是一个名字,一个引用,不占内容空间,占内存空间的是实参,叫argument。实参可能是局部变量,形参连变量都不是。
根号申 发表于2019-07-24 08:50
那么实参传递给形参之后 形参不是就有值了吗 这时候形参变量不就是局部变量了吗 我这样理解对不对 那么出了方法之后 形参变量是不是会被销毁 ? 老师
weikeli19 发表于2019-07-24 10:29
我已经告诉你了,形参连变量都不是,形参使用的值是实参提供的,形参引用的值什么时候被销毁,是由实参的作用域决定的。
你要是想摸清JVM底层概念,建议去看这本书,可以解答你所有的疑惑。在JVM中,所有的值都只分为局部变量和常量。只要不是常量的量都会保存在栈帧的局部变量表中,包括方法参数。局部变量表保存的都是引用地址,等同于C语言中的指针。栈帧随着方法创建而创建,随着方法结束而销毁。JVM的垃圾回收器GC清理的是堆,也就是具体的数值,没有被任何引用使用的值才会GC被清理。这本书里都有提到,入门书籍简化了很多概念,是为了容易理解,你要是想深究就去看书。
根号申 发表于2019-07-24 15:14
好的 老师 谢谢了