gpt4 book ai didi

Java 按值传递澄清

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:38:00 24 4
gpt4 key购买 nike

<分区>

我有一个 Cell 对象列表,代表棋盘类中的棋盘游戏。

Cell boardGame[][] = new Cell[8][8];

我需要一个临时单元格来尝试玩家在他身上移动并将其与其他单元格进行比较,所以我想我可以使用 java 值传递来做到这一点。

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% 理解它。

我原以为棋盘上只会看到一个白皇后,但我看到了两个。我知道如果你传递一个引用你可以改变它的值,但我认为如果我传递数组本身它的成员将不会被修改除非我执行返回。

请帮助我更好地理解这个主题。谢谢

编辑:

我想我不明白它什么时候调用属性,什么地方不调用。如果您被称为"new",我会有所不同。

当它是另一个对象的一部分时,它称为属性吗?但是每个对象都可以作为另一个对象的一部分创建。我可以在狗类中创建一个新字符串,然后在动物类中创建狗类,然后在另一个类中创建它。所以只有顶级类在堆栈中?

例如:

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 是在堆中创建的,因为它是板对象的一部分,所以它需要两种情况都改变了没有?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com