-1

我有一个 IntArray A。

int[] A={1,2,3};

我把它复制到B。

int[] B=A;

现在我想改变 A 中的元素;

A[1]=B[2];

我希望 A 现在变为 {1,3,3},而 B 保持相同的 {1,2,3}。

为什么B改为[1,3,3]?

4

6 回答 6

3

它们都不是单独的数组。

你写了

int[] B=A;

因为有指向同一个数组。

如果你改变A自动B改变。

如果你想让B 常量创建一个名为B.

int[] B = new int[3];

正如您对按引用传递和值传递感到困惑的那样:Java 是“按引用传递”还是“按值传递”?

于 2013-09-14T09:11:34.740 回答
3

因为您没有复制数组,所以使用引用很简单。

这意味着,如果您创建一个数组,您就是在为该变量分配一块内存。

int[] array ----------------> PieceOfMemory

如果你像你一样“复制”数组,你只是告诉另一个变量指向同一块内存

int[] array ----------------> PieceOfMemory <----------------- int[] secondArray

在这种情况下,如果您更改“PieceOfMemory”,则很明显您正在更改这两个变量。

如果要复制数组,则必须这样做:

int[] firstArray = {1,2,3};
int[] secondArray = new int[3];
secondArray = (int[]) clone(firstArray);

现在发生的事情是这样的:

int[] firstArray ---------------------> firstPieceOfMemory
int[] secondArray --------------------> secondPieceOfMemory

但是值被复制。

于 2013-09-14T09:16:57.883 回答
2

当你这样做

int[] B=A;

B并且A都指向同一个后备数组B这里A只是指向相同底层数组的引用。

A ----->[1,2,3]
           ^
B----------|

要制作新副本,您可以使用Arrays#copyOf或手动创建一个新数组并逐个复制字段。

于 2013-09-14T09:12:19.657 回答
2

您需要了解对象和引用之间的区别

B=A;不复制数据,而是复制对数据的引用

于 2013-09-14T09:14:13.293 回答
1

因为 B 不是一个新数组,它只是 A 引用的数组的另一个名称。

于 2013-09-14T09:12:06.583 回答
1

是的 B 也更改为 {1,3,3} 因为 A 和 B 只是引用存储数组的实际内存对于两个数组来说都是相同的,所以两个数组都包含相同的值。

于 2013-09-14T09:16:13.897 回答