我有这门课,但我不明白到底发生了什么:
public class Table {
private int[][] array;
private int N;
// constructor
public Table(int[][] array) {
N = array.length;
this.array = Arrays.copyOf(array, N);
}
// this method returns another Table object
public Table tweak() {
int[][] tweak = Arrays.copyOf(array, N);
// here I change the array
return new Table(tweak);
}
}
问题是当我调用调整方法时,用于调用该方法的对象也发生了变化:
public class TestCls {
public static void main(String[] args) {
int[][] array = {{1, 2},
{3, 4}};
Table a = new Table(array);
System.out.println(a.toString());
/* this will print
* 1 2
* 3 4
*/
Table b = a.tweak();
System.out.println(b.toString());
/* this will print
* 2 1
* 3 4
*/
System.out.println(a.toString());
/* this will also print
* 2 1
* 3 4
*/
}
}
请帮助我理解为什么会发生这种情况以及我应该如何更改调整方法以使原始对象不被更改。
谢谢