Primero mire la declaración de System.arraycopy ():
public static native void arraycopy(Object src,int srcPos, Object dest, int destPos,int length);
src-la matriz de origen.
srcPos: la posición inicial en la matriz de origen.
dest-la matriz de destino.
destPos: la posición inicial en los datos de destino.
longitud: el número de elementos de la matriz que se copiarán.
Este método utiliza la palabra clave nativa, lo que indica que se llama a la función subyacente escrita en otros idiomas.
Mire Arrays.copyOf () nuevamente
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
@SuppressWarnings("unchecked")
T[] copy = ((Object)newType == (Object)Object[].class)
?(T[]) new Object[newLength]
:(T[])
Array.newInstance(newType.getComponentType(), newLength);
System.arraycopy(original,0, copy,0,
Math.min(original.length, newLength));
return copy;
}
Este método corresponde a diferentes tipos de datos y tiene su propio método sobrecargado
original: la matriz que se va a copiar
newLength: la longitud de la copia que se devolverá
newType: el tipo de copia que se devolverá
Observe cuidadosamente y descubra que el método System.arraycopy () se llama dentro de copyOf ()
La diferencia es que:
- System.arraycopy () necesita la matriz de destino, copie la matriz original en la matriz definida por usted mismo, y puede elegir el punto de inicio y la longitud de la copia y la posición en la nueva matriz
- Arrays.copyOf () es el sistema que crea automáticamente una matriz internamente, llama a arraycopy () para copiar el contenido original a la copia, y la longitud es newLength. Devuelve copia; es decir, copia la matriz original en una nueva matriz de longitud newLength y devuelve la matriz.
para resumir
Array.copyOf () se puede considerar como un System.arraycopy () restringido, se utiliza principalmente para copiar toda la matriz original a una nueva matriz de longitud, adecuada para la expansión de la matriz .