【问题标题】:Passing multi-dimensional arrays传递多维数组
【发布时间】:2023-03-10 09:01:01
【问题描述】:

我写了以下代码。它工作得很好,但我有一个问题(所以我不会轰炸任何未来的补充)。代码如下:

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

【问题讨论】:

  • quiz 接收到数组引用的副本。
  • @sstan - 好的,但这是我没有得到的 - 在 btnGetQuizActionPerformed 中执行完代码后,我猜测对象 fns(存储 GetQuiz 及其变量的位置)被破坏了。如果 quiz 正在获取对已销毁数组的引用的副本,当用户单击其他按钮时,我如何仍然能够从 quiz 数组中提取值?

标签: java object multidimensional-array


【解决方案1】:

假设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

【讨论】:

  • 嘿,感谢您拼写出来,尤其是链接。
【解决方案2】:

在您的程序中,quiz 即使在执行btnGetQuizActionPerformed() 之后仍将保持其值,因为它收到了对fns 的引用的副本。

【讨论】:

    猜你喜欢
    • 2012-10-12
    • 2018-01-08
    • 2020-07-21
    • 2010-09-30
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多