Tmp复制初始值[全局数组]

时间:2017-12-10 13:04:00

标签: java arrays copy global

我正在开发一个程序,我必须不断更改全局数组中的值。

在一个方法中,我需要使用这个全局数组的副本,但副本应该只包含我的全局数组的第一个初始值(因此副本不应该像global一样更改值)。 任何人都可以帮我如何初始化这样的tmp数组吗?

int[][] copy = int [][] global; 

不会工作。

1 个答案:

答案 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]);
            }
        }
    }