Arrays.copyOf(원본배열, 복사본 배열의 길이)
어떤 배열을 복사하거나, 자르거나 0 또는 null을 추가하여 원하는 길이의 배열을 만들 수 있다.
원본 배열과 복사본 배열 모두에게 유효한 인덱스에서는 두 배열이 동일한 값을 같게 된다.
복사본에는 인덱스가 있지만 원본에는 해당 인덱스의 값이 없는 경우, 즉 원본의 배열의 길이보다 복사본의 배열의 길이가 긴 경우에는 복사본의 해당 인덱스에는 0 또는 null로 채워진다. 
import java.util.Arrays;
int[] arr1 = new int[] {1, 2, 3};
int[] arr2 = Arrays.copyOf(arr1, 3);
for (int num: arr2) {
	System.out.print(num + " ");
    }
    
// 1 2 3
arr2 = Arrays.copyOf(arr1, 5)
for (int num: arr2) {
	System.out.print(num + " ");
    }
   
// 1 2 3 0 0
arr2 = Arrays.copyOf(arr1, 2)
for (int num: arr2) {
	System.out.print(num + " ");
    }
// 1 2Arrays.copyOfRange(원본배열, from, to)
어떤 배열의 특정 길이로 배열을 복사한다. from의 값은 0부터 원본 배열의 길이 사이의 값을 넣어야한다. from이 원본 배열의 길이인 경우와 from과 to의 값이 같은 경우를 제외하고 원본 배열[from] 의 값은 복사본 배열[0] 의 값이 된다. 이후 차례대로 원본 배열의 값이 복사본 배열의 값으로 들어간다.
to 는 from 의 값과 같거나 이보다 커야한다. to가 원본 배열의 길이와 같거나 그보다 작은 값인 경우, 인덱스가 to 이전까지 복사된다.
만약 from의 값이 원본 배열의 길이와 같거나 그보다 크다면, 복사본 배열의 모든 값이 0 또는 null이 되며, 반환되는 배열의 길이는 to - from 이 된다.
import java.util.Arrays;
int[] arr1 = new int[] {1, 2, 3};
int[] arr2 = Arrays.copyOfRange(arr1, 1, 2);
for (int num: arr2) {
	System.out.print(num + " ");
    }
    
// 2
int[] arr1 = new int[] {1, 2, 3};
int[] arr2 = Arrays.copyOfRange(arr1, 3, 5);
for (int num: arr2) {
	System.out.print(num + " ");
    }
    
// 0 0