2 回答
TA贡献1865条经验 获得超7个赞
但是,这并没有解释如何使用 return 关键字将在方法中创建的对象(例如数组)返回到调用者的作用域
你可以这样做的原因是对象不是在堆栈上创建的;只有对它的引用。该数组一直保留在动态分配的内存中,直到它符合垃圾回收条件。当您将方法返回的结果分配给另一个变量或字段时,引用的值会被保留,因此对象会保留在内存中。
返回运算符是否将数组或对象从方法的临时堆栈移动到调用者的堆栈?
只有引用的值被复制。引用是一个相对较小的对象,其大小仅取决于运行 JVM 的系统。特别是引用的大小不会随着被引用对象的大小而改变,因此需要复制的数量是有限的。
TA贡献1784条经验 获得超8个赞
需要注意的重要一点是,如果您在方法中返回一个对象并且不保存它,它实际上会被垃圾收集。例如,如果您有:
public int somemethod(){
int myint = 9;
return myint;
}
然后调用someMethod()您的 main 方法,为了将来访问此返回,您必须存储它。
public static void main(String [] args){
this.someMethod(); //can't access myInt.
int savedInt = someMethod(); // Saves the value 9 for future access.
}
所以一般来说,当你调用一个方法然后返回类型在该方法从堆栈中移除之前存在时,但是为了将来使用它,你必须将值存储在一个仍然存在的变量中。
添加回答
举报