java - 堆栈中的push(int[][])复制相同的值Java

标签 java stack stack-trace

我有一个二维数组和堆栈:

int[][] data = new int[][];
Stack<int[][]> undoList = new Stack<int[][]>(10);

我想在每次更改后添加数据以将其保留在撤消列表中:

undoList.push(data);
// some changes to data array
undoList.push(data);
// some changes to data array
undoList.push(data);

那为什么所有的栈元素都有相同的值呢?

最佳答案

您正在对数组进行更改 - 但您没有将数组本身放入堆栈中...您正在将数组的引用放入堆栈中。您基本上多次推送相同的引用。如果您想要独立的值,则需要独立的数组。

将引用想象成有点像写在一张纸上的街道地址(其中这张纸通常是一个变量)。你现在拥有的是一本书,每一页上都有相同的街道地址。您可能在每一页上书写之间画了房子的前门,但这并不意味着我们可以看到所有这些不同的颜色 - 只涉及一栋房子。如果您想获得许多不同房屋的街道地址以及许多不同颜色的前门,您需要 build 许多不同的房屋......

关于java - 堆栈中的push(int[][])复制相同的值Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25572709/

相关文章:

c - C中弹出中间元素

java - 类型参数不在类型变量的范围内

exception - 如何在 Test Cafe 错误中获取完整的堆栈跟踪

java - 使用 JGit 远程 git 存档

java - 将表从 Oracle 复制到 Redis

java - 使用函数将元素添加到类数组。处理3中的 "Paint"

c - 打印堆栈指针与 backtrace() 打印输出

javascript - 在 unhandledrejection 事件处理程序中获取堆栈跟踪

戈朗 : Stack Trace single routine when program crashes

java - Java中有没有类似于Android中的android.os.Handler的类?