我想让两个数组具有相同的值

时间:2019-01-14 00:54:03

标签: java arrays copy

我想在下面的Java中将array2设置为array1,但是它不起作用。

int[] array1 = new int[3]{1,2,3};
int[] array2 = new int[3];
array2 = array1;

这有什么问题?

3 个答案:

答案 0 :(得分:2)

array1的引用分配给array2时,将创建数组的 shallow 副本;两个引用指向同一数组。我假设您想要一个 deep 副本,并且您可以使用Arrays.copyOf(int[], int)来获得一个副本。另外,您不需要new[]和明确的大小。可能看起来像

int[] array1 = { 1, 2, 3 };
int[] array2 = Arrays.copyOf(array1, array1.length);

答案 1 :(得分:0)

第二行是POINTLESS。您正在创建一个新的数组,在每个插槽中填充0。

然后,以下分配将丢弃该数组!您最终得到两个变量,它们引用完全相同的数组(“内存中的位置”)。

如果要使两个不同的数组对象具有相同的内容,则必须迭代第一个数组并逐个复制每个插槽。或使用System.arrayCopy()获得更好的性能!

答案 2 :(得分:0)

编译后的语句int [] array1 = new int [3] {1,2,3};给出语法错误。更正后的语句没有数组的大小:

int [] array1 = new int [] {1,2,3};

或者,您甚至可以执行此操作(称为数组文字语法):

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

使用以下语句打印数组的内容时:System.out.println("Array 1: " + Arrays.toString(array1));,您将看到结果:Array 1: [1, 2, 3]

其余代码按预期工作正常。

int[] array1 = new int[] {1,2,3};
System.out.println("Array 1: " + Arrays.toString(array1));
int[] array2 = new int[3];
System.out.println("Array 2: " + Arrays.toString(array2));
array2 = array1;                                    
System.out.println("Array 2: " + Arrays.toString(array2));

我曾经使用java.util.Arrays实用程序类来打印数组的元素。另一种方法是遍历数组元素,并使用for循环打印每个元素。

控制台上上述代码的输出:

Array 1: [1, 2, 3]
Array 2: [0, 0, 0]
Array 2: [1, 2, 3]

array2最初显示[0, 0, 0]作为其值。这是因为您在创建数组时未分配任何值。并且int数组的元素的默认值为