在 java 中使用二维数组存储 stack 对象时,若所有数组元素指向同一个 stack 实例,对任一位置的修改将影响全部位置;正确做法是为每个数组单元独立初始化新 stack 实例。
当你声明 Stack
在原始代码中:
public StackSquare = new Stack<>(); Square.push(0); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { GameBoard[i][j] = Square; // ❌ 所有位置都指向同一个 Stack 实例 } } GameBoard[1][1].push(1); // ✅ 修改的是唯一那个 Stack → 全部“看到”该变化
由于 GameBoard[i][j] 均引用同一 Square 对象,调用任意位置的 .push() 实际都在操作同一个底层数据结构(Stack 内部的 Vector 或 ArrayDeque),因此表现为“所有栈同步更新”。
✅ 正确解法:为每个二维索引独立创建新 Stack 实例:
public Stack[][] gameboard = new Stack[3][3]; public Stack [][] fillBoard() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { Stack square = new Stack<>(); // ✅ 每次循环新建独立栈 square.push(0); // 初始化默认值 gameboard[i][j] = square; } } gameboard[1][1].push(1); // 仅修改 [1][1] 位置的栈 return gameboard; }
? 注意事项:

? 验证效果:执行后 gameboard[0][0] 仍为 [0],gameboard[1][1] 为 [0, 1],其余为 [0] —— 各栈行为完全独立,符合预期。