java - Java 中复制数组的这些方法有什么区别?

标签 java arrays

我想复制一个数组。通常,我会做这样的事情。

int[] a1 = {1, 2, 3};
int[] a2 = a1

但是最近,我看到我的教授是这样做的:

int[] ar1 = {1, 2, 3};
int[] ar2 = Arrays.copyOf(ar1);

一种方式比另一种方式有优势吗?主要区别是什么?

最佳答案

在第一种情况下,两个数组都指向同一个对象。因此,修改其中一个也会修改另一个。

int[] a1 = {1, 2, 3};
int[] a2 = a1
a1[0] = 15;
System.out.println(a2[0]); //15

在第二种情况下,会创建一个真实副本,因此修改一个副本不会影响另一个副本。

int[] a1 = {1, 2, 3};
int[] a2 = Arrays.copyOf(a1, 3);
a1[0] = 15;
System.out.println(a2[0]); //1

如果您想了解有关 Java 中复制的详细信息,请参阅 How do I copy an object in Java? 的第二个答案

关于java - Java 中复制数组的这些方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33715275/

相关文章:

java - 公共(public)类中的嵌套 JavaFX Controller

python - 将图像数组从 Python 传递到 C 会带来损坏的数据

javascript - 每次调用我的函数时,我都想打印 Next Day 的名称

c++ - 'for'循环在满足终止条件之前终止

c++ - 根据intel博客实现concurrent_vector

c - 当内存不足时,如何防止变长数组崩溃?

java - RxJava 2 : emit collected list of items after a certain period of time

java - 一种返回可选值(如果存在)而不保存或派生两次的方法?

java - Intellij 中的 Tesseract 无法读取 pdf,因为 'gsdll64' 库无法加载

java - 为什么改变初始化 RandomAccessFile 对象的方式会改变 FileChannel 性能?