Java 使用Arraylist复制三维数组是否不安全?
我想知道是否可以使用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
/*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,如果我问是因为我已经尝试过,但我没有能力验证它…你应该包括你用来尝试它的代码;它有几个方面的帮助:证明您已经尝试过,并允许反馈如何更好地测试它。如果你修改你的问题,把不起作用的测试也包括进去,我会很高兴推翻我的否决票。