【发布时间】:2016-04-22 07:43:45
【问题描述】:
我有一个代表棋盘类中棋盘游戏的 Cell 对象列表。
Cell boardGame[][] = new Cell[8][8];
我需要一个临时单元格来尝试玩家在他身上移动并将其与其他单元格进行比较,所以我认为我可以使用 java pass-by-value 来做到这一点。
test(board.boardGame);
board.printBoard();
private static void test(Cell[][] boardGame) {
Cell c = new Cell((new Soldier(ChessPiece.QUEEN, Color.WHITE)), 7, 4);
boardGame[7][7] = c;
}
我在这里阅读了一些关于 java 的帖子,但显然我仍然没有 100% 理解它。
我原以为棋盘上只会看到一个白皇后,但我看到了两个。 我知道如果你传递一个引用,你可以改变它的值,但我认为如果我传递数组本身,它的成员不会被修改,除非我执行返回。
请帮助我更好地理解这个主题。 谢谢
编辑:
我想我不明白它何时调用属性以及在何处不调用。 如果你被称为“新”,我会有所不同。
当它是另一个对象的一部分时它称为属性对吗?但是每个对象都可以创建为另一个对象的一部分。我可以在狗类中创建一个新字符串,然后在动物类中创建狗类,然后在另一个类中创建它。所以只有顶层类在堆栈中?
例如:
public class Board { //fake class
int num= 0;
public void test(int i){
i = 1;
}
}
在另一个班级:
public class Main {
static void outsideTest(Board board){
board.num = 1;
}
public static void main(String[] args) {
Board board = new Board();
System.out.println(board.num);
board.test(board.num);
System.out.println(board.num);
outsideTest(board);
System.out.println(board.num);
}
}
现在我不明白为什么在 test() 方法上 num 没有改变,而在 outsideTest() 上 num 改变了,num 是在堆中创建的,因为它是板对象的一部分,所以它需要两种情况都改变了没有?
【问题讨论】:
-
数组的值是一个引用(和其他所有的
Object一样)。 -
为什么看不到 2 个皇后,因为这段代码中没有任何内容可以将皇后从第一个单元格中删除?
-
Cell的构造函数中的两个int参数是什么?您是否正在传递初始位置? printBoard() 的主体是什么?它是探测棋子以查看它们的位置还是依赖于 boardGame 数组的内容?
-
@Jim W,boardGame 数组内容的打印继电器主体。用于其他功能的单元格内的位置并不总是知道特定单元格的来源。
标签: java cell pass-by-value