没有引用的java数组布尔副本

时间:2014-03-20 02:16:26

标签: java reference

我有以下代码:

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 ,该怎么办?

3 个答案:

答案 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只是做了我们的预期。