我正在与一个intn董事会合作:
0 2 3
4 1 5
7 8 6 我想复制一个名为孪生,然后返回修改的副本。
例如:
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并修改我所期望的方式?我是否应该在板上循环并将值复制到孪生?
发布于 2019-03-22 23:13:17
首先,数组不是原始类型;它是一个对象。第二,多维数组被实现为数组数组。此外,数组的clone方法也很浅。当您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复制单个一维数组。
https://stackoverflow.com/questions/55308858
复制相似问题