我想在下面的Java中将array2
设置为array1
,但是它不起作用。
int[] array1 = new int[3]{1,2,3};
int[] array2 = new int[3];
array2 = array1;
这有什么问题?
答案 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
数组的元素的默认值为零。