在Java中System.arraycopy() 和 Arrays.copyOf()两者之间的区别

翻译 2015年12月21日 20:48:10

原文链接

如果我们想拷贝一个数组,我们可能会使用System.arraycopy()或者Arrays.copyof()两种方式。在这里,我们将使用一个比较简单的示例来阐述两者之间的区别。

1、示例代码:

System.arraycopy()

int[] arr = {1,2,3,4,5};
 
int[] copied = new int[10];
System.arraycopy(arr, 0, copied, 1, 5);//5 is the length to copy
 
System.out.println(Arrays.toString(copied));
运行结果:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 2, 3, 4, 5, 0, 0, 0, 0]


Arrays.copyof()
int[] copied = Arrays.copyOf(arr, 10); //10 the the length of the new array
System.out.println(Arrays.toString(copied));
 
copied = Arrays.copyOf(arr, 3);
System.out.println(Arrays.toString(copied));
运行结果:

[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
[1, 2, 3]


2、两者间的主要区别

两者的区别在于,Arrays.copyOf()不仅仅只是拷贝数组中的元素,在拷贝元素时,会创建一个新的数组对象。而System.arrayCopy只拷贝已经存在数组元素。

如果我们看过Arrays.copyOf()的源码就会知道,该方法的底层还是调用了System.arrayCopyOf()方法。

public static int[] copyOf(int[] original, int newLength) { 
   int[] copy = new int[newLength]; 
   System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); 
   return copy; 
}


翻译不到位的地方,还请朋友多多见谅、指正。





相关文章推荐

Java Arrays.copyOf 功能

Arrays.copyOf功能是实现数组的复制,返回复制后的数组。参数是被复制的数组和复制的长度: package setclass; import java.util.Arrays; impor...

Java方法之--System.arraycopy方法和Arrays.copyOf()

System.arraycopy方法:如果是数组比较大,那么使用System.arraycopy会比较有优势,因为其使用的是内存复制,省去了大量的数组寻址访问等时间 public static na...

Arrays.copyOf()&Arrays.copyOfRange()

    在JDK1.5的类System类中有方法      public static void arraycopy(Object src,                             i...

关于Java中的Arrays.copyOfRange()方法

要使用这个方法,首先要import java.util.*; Arrays.copyOfRange(T[ ] original,int from,int to) 将一个原始的数组original,...

Arrays.copyof(···)与System.arraycopy(···)数组元素复制区别

他们的区别就是 System.arraycopy不关心你是什么数据类型,只是完成数据元素复制。Arrays.copyof方法是根据不同类型调用System.arraycopy方法完成复制内容。 S...
  • JQ_AK47
  • JQ_AK47
  • 2016年10月18日 20:16
  • 1196

关于Java 拷贝数组方法 Arrays.copyOf() 是地址传递还是值传递

在看别人的关于 CopyOnWriteArrayList 这个类的时候,看到有人提出了关于:数组拷贝的方法Arrays.copyOf() 的问题,如下: 只是复制了引用地址,数组内的对象还是和旧数组一...

Arrays.copyOf

首先观察先System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)的声明: [java] vi...

Arrays.copyof(···)与System.arraycopy(···)区别

首先观察先System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)的声明: public stat...

Arrays.copyOf和System.arraycopy之间的区别

看vector中的源码,发现了有些部分使用的是System.arraycopy,另外一部分使用的Arrays.copyOf,就看了下,发现如果已经明确指定了目标数组和源数组的就是直接用的System的...
  • whu_zcj
  • whu_zcj
  • 2016年08月03日 20:29
  • 705

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Java中System.arraycopy() 和 Arrays.copyOf()两者之间的区别
举报原因:
原因补充:

(最多只允许输入30个字)