使用Arraylist复制三维数组不安全?

is unsafe to copy a three-dimensional array using Arraylist?

我想知道是否可以使用 ArrayList<>() 作为中间步骤来复制 3 维数组。

请考虑以下代码:

        /*variable declaration*/
        int[][][] array;
        int[][][] array2;
        ArrayList<int[][][]> list;
        ArrayList<int[][][]> list2;

        /*initialization*/
        array = new int[10][12][14];
        list = new ArrayList<>();

        list.add(array);

        //Construct 'list2', using all the elements contained in 'list'
        list2 = new ArrayList(list);

        array2 = list2.get(0);

我想知道 array2 是数组的完整副本(深度副本),还是 array2 是对数组的引用(指向内存中的同一对象).

另外,这是不安全的操作吗?

即使您将第一个列表克隆到第二个列表后,valval2 都指向内存中的同一个对象。

你可以证明这一点:

System.out.println(val == val2);

打印"true"

也就是说,请注意,当您将一个集合传递给 ArrayList 复制构造函数时,它所做的只是构造一个包含指定集合元素的列表,所以我不确定您为什么期望它执行某种类型的 "deep copying"

ArrayList<int[][][]> vec2=new ArrayList(vec);

此处您正在创建 ArrayList 的新实例,但 vecvec2 都引用同一个三维数组。

你可以看看这个question. Here the Java 8 documentation for System.arraycopy