Java类复制和数组

Ger*_*rak -1 java arrays object

我在一个数组中的对象有一些问题,作为一个对象,而不是按预期分开.例如

boardArray = new object[4];
workingBoardArray = new object[4];
boardArray[0] = new board(boardA);
boardArray[1] = new board(boardB);
boardArray[2] = new board(boardC);
boardArray[3] = new board(boardD);
int selectedBoard = selectBoard(boardArray);
workingBoardArray[0] = boardArray[selectedBoard];
workingBoardArray[1] = boardArray[selectedBoard];
workingBoardArray[2] = boardArray[selectedBoard];
workingBoardArray[3] = boardArray[selectedBoard];
workingBoard[0].moveUp();
workingBoard[1].moveRight();
workingBoard[2].moveDown();
workingBoard[3].moveLeft();
Run Code Online (Sandbox Code Playgroud)

此代码创建一组4个板,找到所需的板,将板复制到工作板阵列中,然后将每个工作板移向新的方向.问题是董事会都在一起行动.因此,如果我在workingBoard [0]上执行moveUp(),那么workBoard [1]也会向上移动.有没有办法解决这个问题,我觉得我错过了一些基本的理解或者是一个非常愚蠢的错误.

我也试过使用像这样的复制构造函数

workingBoard[0] = new Board(boardArray[selectedBoard].getBoard);
Run Code Online (Sandbox Code Playgroud)

它检索所有重要的董事会信息并用它创建一个新的董事会,但这似乎不会影响任何事情.任何帮助都会很棒

Jon*_*eet 7

看看这段代码:

int selectedBoard = selectBoard(boardArray);
workingBoardArray[0] = boardArray[selectedBoard];
workingBoardArray[1] = boardArray[selectedBoard];
workingBoardArray[2] = boardArray[selectedBoard];
workingBoardArray[3] = boardArray[selectedBoard];
Run Code Online (Sandbox Code Playgroud)

这是将所有四个数组元素设置为对同一对象的引用.所以,是的,当您通过调用moveUp()或其他方式修改该对象时,该更改通过数组中的所有元素可见.

听起来您可能希望每次都创建一个板的副本.根据您的board类型(应Board遵循命名约定),您可能只想实现Cloneable(很可能覆盖该clone()方法)或提供其他类型的复制操作.

您是否了解Java中的引用对象之间的区别,并且该数组仅包含引用,而不包含对象?(同样,任何变量值都只是一个引用而不是对象.)了解对象在Java中的工作方式非常重要.例如:

 StringBuilder a = new StringBuilder();
 StringBuilder b = a;
 a.append("Foo");
 System.out.println(b); // Still prints "Foo"
Run Code Online (Sandbox Code Playgroud)

这里我们有一个 StringBuilder对象,即使有两个变量(ab),其值引用同一个对象.