【问题标题】:What is happening differently when cloning 1D array and 2D array克隆一维数组和二维数组时发生了什么不同
【发布时间】:2014-01-08 21:50:28
【问题描述】:

我首先克隆了一维原始数组(它将保存包装器),然后更改了克隆数组的第一个值。但是原始数组的第一个值没有改变。然后我克隆了一个 2D 数组并做了同样的事情。(改变了 array[0][0] 值)。原来的值在 originalArray[0][0] 也被改变了。为什么会这样。这是浅拷贝和深拷贝的原因吗?

我的一维数组示例

    int[] arr=new int[2];
    arr[0]=1;
    arr[1]=2;

    int[]arrnew=arr.clone();
    System.out.println(arr[0]);
    System.out.println(arrnew[0]);
    arr[0]=5;
    System.out.println(arr[0]);
    System.out.println(arrnew[0]);

我的二维数组示例

        int[][] arr=new int[2][2];
        arr[0][0]=1;
        arr[0][1]=2;
        arr[1][0]=3;
        arr[1][1]=4;
        int[][] arrnew=arr.clone();
        System.out.println(arr[1][0]);
        System.out.println(arrnew[1][0]);
        arr[1][0]=5;
        System.out.println(arr[1][0]);
        System.out.println(arrnew[1][0]); 

【问题讨论】:

    标签: java arrays clone


    【解决方案1】:

    这是浅拷贝和深拷贝的原因吗?

    是的。 clone() 只执行浅拷贝。

    clone 方法复制第一个维度的内容。在第一个例子中,数组只有一维并且由整数组成(这是一种值类型),所以所有的整数都被复制了。这仍然是一个浅拷贝。如果您对数组中的引用类型进行了相同的示例,您将看到与多维数组相同的行为。

    在第二个例子中,你有一个二维数组,它基本上是一个数组数组,所以“第一个数组”包含引用。克隆多维数组时,会复制对数组的引用,而不是那些数组的内容(因为它不是深拷贝)。

    【讨论】:

    【解决方案2】:

    更改int[][] arrnew=arr.clone(); to int[][] arrnew=(int[][]) arr.clone();
    它的行为与一维数组的情况相同

    【讨论】:

      猜你喜欢
      • 2013-10-31
      • 1970-01-01
      • 2013-04-17
      • 2020-05-11
      • 1970-01-01
      • 2021-10-06
      • 2019-05-09
      • 2013-11-23
      相关资源
      最近更新 更多