怎么会这样
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;
我现在认为它可能更有效。