La System
clase Java contiene varios miembros de datos y métodos que tienen mucho sentido estar allí. Por ejemplo:
System.in (variable)
System.err (variable)
System.out (variable)
System.exit(int)
System.gc()
System.getSecurityManager()
Sin embargo, hay un método que no entiendo al estar allí:
System.arraycopy(Object, int, Object, int int)
Copiar una matriz a otra me parece que pertenece a la Arrays
clase; siguiente de la documentación:
Esta clase contiene varios métodos para manipular matrices (como ordenar y buscar). Esta clase también contiene una fábrica estática que permite que las matrices se vean como listas.
Los métodos para manipular matrices es lo que me lleva a esta conclusión, ya que copiar una matriz a otra es seguramente una manipulación de la matriz , ¿verdad?
Entonces mi pregunta: ¿por qué está arraycopy()
adentro System
?
¿Es una reliquia de una System
implementación temprana de la clase Java ? El método no está marcado como obsoleto, por lo que estoy un poco perdido. Además, no sigue el estándar Java camelCase, lo que me hace volver a pensar que es una reliquia del diseño inicial de la biblioteca.
Respuestas:
System.arraycopy
se implementa de forma nativa por cada JVM. Aquí está la declaración del método:Esto significa que realiza la copia de la matriz de la manera más rápida posible en las instrucciones de ensamblaje nativas. La idea es que esta es una funcionalidad potencialmente lenta y tan necesaria que Java debería proporcionar este comportamiento a un nivel bajo.
Otras formas de copiar matrices pueden envolver
System.arraycopy
o usar bucles interpretados, que no serían tan efectivos.fuente
native
métodos enSystem
? Al nombrar la convención, tiene sentido, ya que dependen del sistema , pero desde el punto de vista de la organización,arraycopy
tendría sentido que se definiera en laArray
clase o algo similar, y tuviera su implementación nativa allí. Personalmente, he usadoarraycopy
solo una vez en mis 5 años de programación.native
métodos están disponiblesSystem
, no haynative
métodos enjava.util.Arrays
.System.arraycopy es una de las partes más antiguas de la biblioteca, mientras que java.util.Arrays se agregó en 1.2. No llamaría a arraycopy una reliquia ya que no hay nada que lo reemplace directamente, y los diversos métodos de copia en Arrays se implementan en términos de ello.
No hay nada especial sobre System o Arrays que requiera que los métodos nativos estén en uno o que eviten que estén en el otro.
fuente