请教一个关于java局部变量在内存中的疑惑

来源:百度知道 编辑:UC知道 时间:2024/05/24 13:26:38
在java一个方法中声明一个变量,然后返回,方法结束后,该变量被复制到另一个临时变量中供方法调用者使用,该变量消失
但如果返回的是一个引用,并且这个引用指向的是在方法体内new出来的存在椎内存的对象。我的疑惑是:
在方法体结束后,为什么还可以通过返回的引用访问这个对象,这个对象不是应该也随方法体的结束而消失吗?难道说对象也在内存中复制多一份。
麻烦高手解答一下

很简单~这位同学,你只要记住:

所有new出来的东西,只要是还有引用指向它。
那么,它就不会消失!

当没有引用指向它的时候,垃圾收集器会在适当的时候
把他清除。

以上就是JAVA运行机制中的一部分(垃圾收集)

你已经说是引用了,既然有有引用指向它,那么它就不会被垃圾回收,也没有在内存中又复制。只是有引用指向它而已

首先要弄明白的是,方法只是一种操作而对象是由构造方法构造出来的。
即使是由方法体内部new出来的对象,在整个class没有结束前,对象是不会被销毁的。那么返回的这个引用对象当然也不会被销毁。

总结:方法是一次性使用的,但是对象要在class结束后才被销毁。

java的GC(垃圾收集器)有自己的一套算法。
只有当它认为没有任何东西将用到这个对象的时候,才会将对象从内存清除。

这样对写程序是非常方便的。
但是在执行效率上就……

对一些用不到了的对象,可以将之置null。
null对象GC做优先清除的。

在JAVA中创建一个对象 是用new 关键字 ,其他的都不是,按你说的赋值,只是你把该对象的引用地址付给变量。

String c="sdfdsss";//c指向"sdfdsss"的引用地址,

c=method_a();//c指向 对象"dfg" 的引用地址

public String method_a(){
String b=new String("dfg");//创建一个对象
return b;
}
方法结束前返回"dfg" 的物理地址,方法结束后 变量 b销毁,这时c接到返回的地址,指向"dfg",对象没有被多复制,还是只有"dfg" 这一