当我修改一个时,两个变量都在变化

时间:2012-09-20 01:09:17

标签: java variables matrix

我正在做这样的算法:

public int[][] moveLeft(int m[][], int[] index){
    Puzzle x = new Puzzle(m);
    System.out.println(x);
    int[][] p = m;
    int temp = p[index[0]][index[1]];
    p[index[0]][index[1]] = p[index[0]][index[1]-1];
    p[index[0]][index[1]-1] = temp;
    return p;
}

更具体地说,我要做的是改变某些值的位置并返回新的矩阵,但是当我调试时,我注意到值“m”也会变化,即使是即时通讯对值p进行更改。这有什么不对?

2 个答案:

答案 0 :(得分:1)

这是你的罪魁祸首:

int[][] p = m;

执行此操作后,pm引用相同的对象,因为Java中的数组是引用对象。对p内容的任何更改都将反映在m中,因为pm是单个对象的两个不同名称。

如果您需要p成为m的副本,则应明确执行此操作。以下是a link to an answer,告诉您如何完成。

答案 1 :(得分:0)

我认为你应该使用:

int [][] p = new int[m.length][];
for(int i = 0; i < m.length; i++)
   p[i] = m[i].clone();

而不是 int [] [] p = m;

以便pm引用两个不同的对象