各种Array复制方法之间的区别

unj*_*nj2 20 java arrays

有什么区别

  • System.arraycopy(),
  • clone()
  • 通过迭代元素进行手动复制
  • Arrays.copyOf()
  • 刚做什么arraynew = arrayold

Joã*_*lva 24

  • System.arraycopy()使用JNI(Java Native Interface)来复制一个数组(或部分数组),所以它非常快,你可以在这里确认 一下 ;
  • clone()创建一个新的具有相同特征的老阵列,即,相同的大小,相同的类型,并且阵列相同的内容.请参阅此处了解一些实际操作示例clone;
  • manual copying是,手动复制.没有太多的话要说,该方法相同,只是很多人都认为它是最高性能.
  • arraynew = arrayold 复制数组; 它只是指向 arraynew内存地址,arrayold或者换句话说,你只是指定一个旧数组的引用.

  • +1.但是,您可以澄清浅层副本是什么(例如*多维数组的克隆很浅,也就是说它只创建一个新数组.子数组是共享的.*). (2认同)

Joa*_*uer 13

  • System.arraycopy() 将数据从一个现有数组复制到另一个数组,并根据参数仅复制其中的一部分.
  • clone() 分配一个与原始类型和大小相同的新数组,并确保它具有相同的内容.
  • 手动复制通常与完全相同System.arraycopy(),但代码更多,因此错误的来源更多
  • arraynew = arrayold 仅将对数组的引用复制到新变量,并且不会影响数组本身

还有一个有用的选择:

Arrays.copyOf()可用于创建具有不同大小的另一个数组的副本.这意味着新阵列可以比原始阵列更大或更大,并且通用大小的内容将是源的内容.甚至还有一个版本可以创建不同类型的数组,以及一个可以指定要复制(Array.copyOfRange())的元素范围的版本.

请注意,所有这些方法都会生成浅表副本.这意味着只复制存储在数组中的引用,并且不会复制引用的对象.


Ven*_*ata 5

Arrays.copyOf(..)在内部使用System.arrayCopy(..)方法.