传递多维数组

时间:2015-11-08 21:03:02

标签: java object multidimensional-array

我写了以下代码。它运作得很好,但我有一个问题(所以我不会炸掉任何未来的添加物)。这是代码:

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时,我是否通过了一个对象,还是只复制了一个引用?

2 个答案:

答案 0 :(得分:2)

让我们说GetQuiz()的实施很简单:

public int[][] GetQuiz() {
    int[][] someArray = new int[10][];
    return someArray;
}

int[][] someArray = new int[10][];在堆上分配一个数组,并将该对象的引用分配给someArray

当方法GetQuiz()完成执行时,唯一的东西"被销毁"是someArray,它只是对数组的引用。数组本身存在于堆上,只有在没有对数组的引用时才有资格进行垃圾回收。

在您的示例中,因为引用的副本已分配给quiz变量,即使someArray被销毁,您仍然有quiz个引用指向数组,所以垃圾收集器不会试图破坏数组。

我认为您可能会发现此主题中的信息很有用:Stack and Heap memory in Java

答案 1 :(得分:0)

在您的计划中,quiz即使在执行btnGetQuizActionPerformed()后也会保留其值,因为它会收到fns的引用副本。