分配两个彼此相等的数组问题

Mas*_*shi 5 java arrays pointers memory-management reference

public static void main(String[]args) {


    int[] x = {1, 2, 3, 4};
    int[] y ;
    y = x;
    x[1] = 11;
    x = new int[2];

    x[0]=99;
    for (int i = 0; i < y.length; i++)
      System.out.print(y[i] + " ");
    System.out.println("");
    for (int i = 0; i < x.length; i++)
          System.out.print(x[i] + " ");
}
Run Code Online (Sandbox Code Playgroud)

答案是

1 11 3 4 
99 0
Run Code Online (Sandbox Code Playgroud)

我的问题是我想当你分配两个数组时,它们共享相同的变化,因为它们是对象...就像我设置x[1] = 11;它时改​​变了它的值y,因此在将它改为2-后仍然不能与x相同大小的数组,或者因为我改变了大小,他们不再指向同一个地址?

Ama*_*dan 8

int[] x = {1, 2, 3, 4};
Run Code Online (Sandbox Code Playgroud)

{1, 2, 3, 4}被分配为数组.对它的引用被分配给x.

int[] y ;
y = x;
Run Code Online (Sandbox Code Playgroud)

同样分配了对该相同数组的引用y.

x[1] = 11;
Run Code Online (Sandbox Code Playgroud)

现在是两个xy引用的数组{1, 11, 3, 4}.

x = new int[2];
Run Code Online (Sandbox Code Playgroud)

由于Java语义,分配了一个新数组{0, 0}.对它的引用被分配给x.现在x,y请参考两个不同的数组.没有调整大小.

x[0]=99;
Run Code Online (Sandbox Code Playgroud)

引用的数组x已更改,现在包含{99, 0}.这与数组y所指的无关,这仍然是愉快的{1, 11, 3, 4}.