在Java中将数组分配给其他数组的问题

Abh*_*ary 17 java arrays

public class TestingArray {

    public static void main(String[] args) {

        int iCheck = 10;
        int j = iCheck;
        j = 11;
        System.err.println("value of iCheck "+iCheck);

        int[] val1 = {1,2,9,4,5,6,7};
        int[] val2 = val1;
        val2[0] = 200;
        System.err.println("Array Value "+val1[0]);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

iCheck 10
Array Value 200的值

从上面的代码中,我发现如果将任何数组val2分配给另一个数组,val1并且如果我们更改了val2数组的任何值,则结果也反映在数组中,val1而相同的方案没有使用变量赋值.为什么?

NPE*_*NPE 29

以下语句val2引用相同的数组val1:

int[] val2 = val1;
Run Code Online (Sandbox Code Playgroud)

如果要复制,可以使用val1.clone()Arrays.copyOf():

int[] val2 = Arrays.copyOf(val1, val1.length);
Run Code Online (Sandbox Code Playgroud)

对象(包括收集类的实例,String,Integer等)的工作以类似的方式,在分配一个变量到另一个简单的拷贝基准,使得两个变量指代相同的对象.如果所讨论的对象是可变的,那么通过其中一个变量对其内容进行的后续修改也将通过另一个变得可见.

原始类型(int,double等)的行为有所不同:有没有参与的参考和分配,使值的副本.