不明白输出

And*_*o98 0 java arrays for-loop output

我认为没有理由为什么这个代码段的输出在底部应该与顶部不同.

public static void main(String[] args) {       

        int[] list1 = {2, 4, 8, 16, 32, 64, 128, 256};
        int[] list2 = list1;
        int max = list1.length - 1;
        for (int k = 0; k < list1.length; k++) {
            System.out.print(list1[k] + " ");
            list2[k] = list1[max - k];
        }
        System.out.print("\n");
        for (int k = 0; k < list1.length; k++) {
            System.out.print(list1[k] + " ");
        }
    }
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

2 4 8 16 32 64 128 256 
256 128 64 32 32 64 128 256
Run Code Online (Sandbox Code Playgroud)

输出的顶部是list1.我也打印出list1作为第二个,但我认为没有理由让它与众不同.list2更改但list1永远不会更改.

这是来自学校,我对两个产出不同的原因感到困惑.

编辑:我知道它与某些事情有关,list2[k] = list1[max - k];但我不明白为什么这会以任何方式改变list1.

Lae*_*rte 5

它们是不同的,因为两个变量都指向同一个对象.要获得相同的结果,请替换此行:

int[] list2 = list1;
Run Code Online (Sandbox Code Playgroud)

至:

int[] list2 = list1.clone();
Run Code Online (Sandbox Code Playgroud)