Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Arraylist复制三维数组是否不安全?_Java_Arrays_Arraylist_Unsafe - Fatal编程技术网

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

Java 使用Arraylist复制三维数组是否不安全?,java,arrays,arraylist,unsafe,Java,Arrays,Arraylist,Unsafe,我想知道是否可以使用ArrayList()作为中间步骤复制一个三维数组 请考虑下面的代码: /*variable declaration*/ int[][][] array; int[][][] array2; ArrayList<int[][][]> list; ArrayList<int[][][]> list2; /*initialization*/ a

我想知道是否可以使用ArrayList()作为中间步骤复制一个三维数组

请考虑下面的代码:

        /*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);
/*变量声明*/
int[][]数组;
int[][]阵列2;
数组列表;
ArrayList列表2;
/*初始化*/
数组=新整数[10][12][14];
列表=新的ArrayList();
添加(数组);
//使用“列表”中包含的所有元素构造“列表2”
list2=新的ArrayList(列表);
array2=list2.get(0);
我想知道array2是数组的完整副本(深度副本),还是array2是对数组的引用(指向内存中的同一对象)


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

即使在将第一个列表克隆到第二个列表之后,
val
val2
都指向内存中的同一对象

您可以通过以下方式证明这一点:

System.out.println(val == val2);
打印“真实”


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

即使在将第一个列表克隆到第二个列表之后,
val
val2
都指向内存中的同一对象

您可以通过以下方式证明这一点:

System.out.println(val == val2);
打印“真实”

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

ArrayList vec2=new arrarylist(vec);
这里您正在创建一个新的
ArrayList
实例,但是
vec
vec2
都引用了相同的三维数组

你可以看看这个。这里是

ArrayList vec2=newarraylist(vec)的Java 8文档;
这里您正在创建一个新的
ArrayList
实例,但是
vec
vec2
都引用了相同的三维数组


你可以看看这个。这里是

的Java 8文档,除非我遗漏了什么,否则它将是对现有对象的引用。尝试通过
==
进行比较。只需尝试,更改一个数组上的值,然后打印另一个数组,您就会看到。答案是否定的,数组是一个对象,你不知道“我不能复印here@tucuxi,如果我问是因为我已经尝试过,但我没有能力验证它…你应该包括你用来尝试它的代码;它有几个方面的帮助:证明您已经尝试过,并允许反馈如何更好地测试它。如果您编辑您的问题以包含无效的测试,我将很高兴撤销我的否决票。除非我遗漏了什么,否则它将是对现有对象的引用。尝试通过
==
进行比较。只需尝试,更改一个数组上的值,然后打印另一个数组,您就会看到。答案是否定的,数组是一个对象,你不知道“我不能复印here@tucuxi,如果我问是因为我已经尝试过,但我没有能力验证它…你应该包括你用来尝试它的代码;它有几个方面的帮助:证明您已经尝试过,并允许反馈如何更好地测试它。如果你修改你的问题,把不起作用的测试也包括进去,我会很高兴推翻我的否决票。