gpt4 book ai didi

Java:int[][]是原始类型吗?或者它是否使用clone()方法生成不同的实例?

转载 作者:行者123 更新时间:2023-12-03 01:57:07 25 4
gpt4 key购买 nike

我正在使用 int[n][n] 板:

0 2 3 
4 1 5
7 8 6

我想制作一个名为 twin 的副本,然后返回修改后的副本。

例如:

    int [][] twin = board.clone();

twin[0][0] = board[0][1];
twin[0][1] = board[0][0];

return twin;

我期望的是:

//board
0 2 3
4 1 5
7 8 6

//twin
2 0 3
4 1 5
7 8 6

但结果是:

//board
2 2 3
4 1 5
7 8 6

//twin
2 2 3
4 1 5
7 8 6

主板和双胞胎一直是相同的,克隆没有按预期工作。是因为int[][]不是对象吗?

有没有办法克隆 int[][] 并修改我期望的方式?我应该循环遍历并将值复制到双胞胎吗?

最佳答案

首先,数组不是原始类型;它是一个物体。其次,多维数组被实现为数组的数组。此外,数组的 clone 方法很浅。当您克隆多维数组时,新的多维数组仍然引用原始的内部数组。

board -> [ .           .           . ]
| | |
v v v
[0, 2, 3], [4, 1, 5], [7, 8, 6]
^ ^ ^
| | |
twin -> [ . . . ]

因此,当您修改值时,您不是从两个不同的数组进行复制,而是从同一个数组进行复制,这就是为什么您最终会得到 [2, 2, 3]。

如果要克隆多维数组,则还需要一直克隆到一维数组。

int [][] twin = board.clone();
for (int i = 0; i < board.length; i++) {
twin[i] = board[i].clone();
}

现在我得到[[2, 0, 3], [4, 1, 5], [7, 8, 6]]

其他可能性包括声明新的多维数组而不进行克隆,以及使用循环和 System.arraycopy 复制单个一维数组。

关于Java:int[][]是原始类型吗?或者它是否使用clone()方法生成不同的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308858/

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