繁体   English   中英

传递多维数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM