有什么理由更喜欢System.arraycopy()而不是clender()?

2022-09-01 03:46:51

在复制整个数组时,我经常看到人们这样写:

int[] dest = new int[orig.length];
System.arraycopy(orig, 0, dest, 0, orig.length);

但在我看来,没有理由支持这一点:

int[] dest = orig.clone();

无论如何,它们都是浅层副本。可能这些人只是没有意识到它的存在。那么有什么理由不使用呢?cloneclone


答案 1
  • clone()使用自己的引用创建第一个数组的不同副本。
  • System.arraycopy()使用JNI(Java Native Interface)来复制数组(或其部分),因此它非常快,您可以在此处确认;
  • clone()创建一个与旧数组具有相同特征的新数组,即相同的大小、相同的类型和相同的内容。请参阅此处了解一些实际操作示例;clone
  • manual copying嗯,是手动复制。关于这种方法没有太多可说的,除了许多人发现它是性能最高的。
  • arraynew = arrayold 复制数组;它只是指向内存地址,或者换句话说,您只是将引用分配给旧数组。arraynewarrayold

答案 2

不。如果你真的是微板凳标记,那么也许,这取决于你正在运行的JVM。但实际上,没有。