怎么会这样

int[] a = {0, 1};
int[] b = a;
a[0] = 1;
b[0] = 2;
System.out.println(a[0] + b[0]);


打印4和这个

int a = 2;
int b = a;
b += 3;
System.out.println(a);


打印2。

这与数组如何使用byReference并在纯原始操作使用byValue时可以操纵原始值有关吗?

最佳答案

int是基元,而不是对象,因此它仅包含一个值。将一个原语分配给另一个原语(a = b)时,您只是在给第一个原语与第二个原语相同的值。因此,当您更改第二个时,它对第一个没有影响。

int[]是一个数组,它是一个对象,该数组的所有元素也是如此。这意味着它们实际上是指向内存中的位置。当将一个对象分配给另一个对象(当a[0] = b[0]a = b是数组时,a甚至是b)时,会将它们都指向内存中的同一位置。因此,当您更改第二个时,它也会同时更改第一个,因为它们实际上指向的是同一件事。

如果希望b[0]仅包含a[0]的值,则可以这样做:

    int[] a = {1, 2};
    int [] b = new int[2];
    b[0] = Arrays.copyOf(a,1)[0];


换句话说,当您仅复制a的第一个元素时,将创建新数组的第0个元素。

更新:您也可以通过一个原语运行它,如下所示:

int x = a[0];
b[0] = x;


我现在认为它可能更有效。

10-07 19:31
查看更多