作者darkk6 (Mr. Pan)
看板AndroidDev
标题Re: [问题] 阵列复制问题
时间Wed Sep 16 18:43:06 2015
先讲重点好了,你可以这样做:
// 你的 Array_chess_map 我用 mapList (纯粹减少文字长度而已)
// chess_map 我用 arr_map
int[][] copyOfMap = new int[13][];
for(int x=0;x<arr_map.length;x++){
copyOfMap[x]=arr_map[x].clone();
}
mapList.add(copyOfMap);
如同 ssccg 所言,造成这个的原因是 java array 的特性:
int[][] a=new int[2][2];
a[0][0]=1;
a[0][1]=2;
a[1][0]=3;
a[1][1]=4;
原理其实是长这个样子:
┌──────┐
┌────→│a[0][0] = 1 │
┌────┐ │ ├──────┤
a ──→ │ a[0] ─┼─┘ │a[0][1] = 2 │
├────┤ └──────┘
│ a[1] ─┼─┐
└────┘ │
│
│ ┌──────┐
└─→│a[1][0] = 3 │
├──────┤
│a[1][1] = 4 │
└──────┘
而非 C 语言中的这样:
┌──────┐
│a[0][0] = 1 │
├──────┤
│a[0][1] = 2 │
├──────┤
│a[1][0] = 3 │
├──────┤
│a[1][1] = 4 │
└──────┘
所以当你执行 int[][] b = a.clone 时,他是把 a[0] 和 a[1]
的值 ==> 也就是指向 a[0][0~1] 和 a[1][0~1] 的 reference
复制到 b[0] 和 b[1]:
┌──────┐
┌────→│a[0][0] = 1 │
┌────┐ │ ├──────┤
a ──→ │ a[0] ─┼─┘ │a[0][1] = 2 │
├────┤ └──────┘
│ a[1] ─┼─┐
└────┘ │
↑
│
│ ┌────┐
│ ┌──────┐
└─┼─ b[0]│←── b
└─→│a[1][0] = 3 │
├────┤
├──────┤
←─┼─ b[1]│
│a[1][1] = 4 │
└────┘
└──────┘
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.254.16.222
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1442400188.A.698.html
※ 编辑: darkk6 (122.254.16.222), 09/16/2015 18:50:59