[英]Passing multi-dimensional arrays
我写了下面的代码。 它很好用,但是我有一个问题(所以我以后不添加任何炸弹)。 这是代码:
public class MoreStuff extends javax.swing.JFrame {
// Globals
int quiz[][]; // Used for Quiz subroutines
...
private void btnGetQuizActionPerformed(java.awt.event.ActionEvent evt) {
Functions fns = new Functions();
String strout;
int i = 0;
// Get the quiz
quiz = fns.GetQuiz();
fns.GetQuiz()完美返回二维数组。
我的问题是:在类级别上声明了多维数组后,当计算机执行quiz = fns.GetQuiz时,我是否传递了对象或仅复制了引用?
假设GetQuiz()
的实现很简单:
public int[][] GetQuiz() {
int[][] someArray = new int[10][];
return someArray;
}
行int[][] someArray = new int[10][];
在堆上分配一个数组,并将对该对象的引用分配给someArray
。
当方法GetQuiz()
完成执行时,唯一被“破坏”的是someArray
,它只是对数组的引用。 数组本身位于堆上,并且仅在不再有对该数组的引用时才有资格进行垃圾回收。
在您的示例中,由于引用的副本已分配给quiz
变量,即使当someArray
被销毁时,您仍然具有指向数组的quiz
引用,因此垃圾收集器不会尝试破坏数组。
我认为您可能会在此线程中找到有用的信息: Java中的堆栈和堆内存 。
在你的程序中, quiz
甚至会执行后保持其价值btnGetQuizActionPerformed()
因为它接收参考的副本fns
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.