私はこのクラスを持っていますが、何が起こっているのか正確にはわかりません。
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);
}
}
問題は、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
*/
}
}
これが発生する理由と、元のオブジェクトが変更されないようにtweakメソッドを変更する方法を理解するのを手伝ってください。
ありがとう