If we want to copy an array, we can use either System.arraycopy()
or Arrays.copyOf()
. In this post, I use a simple example to demonstrate the difference between the two.
1. Simple Code Examples
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));
Output:
[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 arraySystem.out.println(Arrays.toString(copied)); copied = Arrays.copyOf(arr, 3);System.out.println(Arrays.toString(copied));
Output:
[1, 2, 3, 4, 5, 0, 0, 0, 0, 0][1, 2, 3]
2. The Major Difference
The difference is that Arrays.copyOf
does not only copy elements, it also creates a new array.System.arrayCopy
copies into an existing array.
If we read the source code of Arrays.copyOf(), we can see that it uses System.arraycopy()
.
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;
}