我有以下代码:
boolean[] array1;
boolean[] array2;
array1 = new boolean[2];
array2 = Arrays.copyOf(array1, array1.length);
for(int i = 0;i<array2.length;i++){
array2[i]=true;
}
结果是 array1 也将其元素更改为 true 。我认为这是因为 array1 将其引用传递给 array2 ,但我不确定。这个结论是否正确?如果我想修改 array2 而不修改 array1 ,该怎么办?
答案 0 :(得分:2)
类型boolean是一个基本类型,当你使用Arrays.copyOf时,数组值被复制到新数组中。因此,当您修改第二个数组时,是否按值修改数组。我没有在代码中看到任何错误。
答案 1 :(得分:1)
copyOf
不传递引用,但它只是将值从一个数组复制到另一个数组。
尝试以下代码,因为复制后b中的更改未反映在c中。
boolean b[]=new boolean[]{true,false,true};
boolean c[]=new boolean[5];
c=Arrays.copyOf(b, b.length);
b[2]=false;
System.out.println(Arrays.toString(c));
输出将是复制时的[true,false,true]
答案 2 :(得分:1)
当我尝试这段代码时:
boolean[] array1;
boolean[] array2;
array1 = new boolean[2];
array2 = Arrays.copyOf(array1, array1.length);
for(int i = 0;i<array2.length;i++){
array2[i]=true;
}
System.out.println("array1:"+array1[0]);
我得到了回答:
array1:false
所以你的陈述“结果是array1也将其元素更改为true。”真的不是真的。
所以copyOf
只是做了我们的预期。