为什么这个数组值在我 "store" 之后改变了?

Why is this array value changing after I "store" it?

public static Stack<int[]> myMethod(int[] state) {

    int[][] checked = new int[4][4];
    int[][] temporary = new int[4][4];
    Stack<int[]> checklol = new Stack();
    int farmer = state[0];
    int[] valid = { 0, 0, 0, 0 };
    int[] temp = { 0, 0, 0, 0 };
    // invert farmer
    farmer = 1 - farmer;

    valid[0] = farmer;
    valid[1] = state[1];
    valid[2] = state[2];
    valid[3] = state[3];

    for (int i = 1; i < 4; i++) {
        valid[i] = 1 - valid[i];
        if (checkSolution(valid)) {
            checklol.push(valid);
        }
        valid[i] = 1 - valid[i];
    }

    return checklol;
}

所以基本上我从一个数组开始 [1,1,1,1] 我所做的是将第一个翻转为零。这就是我在农民那里所做的 - 1 然后在那个循环中,我遍历第二个数字并翻转那个数字。然后我调用那个 checked 方法,如果它是有效的,那么我想把它压入堆栈。然后我将第二个数字改回原来的数字。 然后我对第三个数字做同样的事情。然后是第四个。

我的问题是压入堆栈的数组被随后的迭代更改了。所以我在堆栈上有 [1,0,1,1],但在它被推入后将其更改为 [1,1,1,1]。但我不希望这种情况发生。

归结为:一旦它在堆栈上,我就不想再更改该值。但还是变了。

如果有任何不清楚的地方,我提前道歉。

我通过先克隆数组然后将其压入堆栈来修复此问题。