我正在开发一个程序,我必须不断更改全局数组中的值。
在一个方法中,我需要使用这个全局数组的副本,但副本应该只包含我的全局数组的第一个初始值(因此副本不应该像global一样更改值)。 任何人都可以帮我如何初始化这样的tmp数组吗?
int[][] copy = int [][] global;
不会工作。
答案 0 :(得分:0)
你需要深层复制。
如果你的数组包含简单类型(例如int):
static int[][] global = {{1, 2}, {3, 4}, {5, 6}};
public static void main(String[] args) {
int[][] copy = new int[global.length][];
for (int i = 0; i < global.length; ++i) {
copy[i] = Arrays.copyOf(global[i], global[i].length);
}
}
如果您的数组包含复杂类型(某些对象),则其中一种方法是复制构造函数:
static class Foo {
private int x;
public Foo(int x) {
this.x = x;
}
public Foo(Foo other) {
this.x = other.x;
}
}
static Foo[][] global = {{new Foo(1), new Foo(2)}, {new Foo(3), new Foo(4)}, {new Foo(5), new Foo(6)}};
public static void main(String[] args) {
Foo[][] copy = new Foo[global.length][];
for (int i = 0; i < global.length; ++i) {
copy[i] = new Foo[global[i].length];
for (int j = 0; j < copy[i].length; ++j) {
copy[i][j] = new Foo(global[i][j]);
}
}
}