A System
classe Java contém vários membros de dados e métodos que fazem todo o sentido estar lá. Por exemplo:
System.in (variable)
System.err (variable)
System.out (variable)
System.exit(int)
System.gc()
System.getSecurityManager()
No entanto, há um método que não entendo estar lá:
System.arraycopy(Object, int, Object, int int)
Copiar uma matriz para outra parece-me pertencer à Arrays
classe; da documentação:
Essa classe contém vários métodos para manipular matrizes (como classificação e pesquisa). Essa classe também contém uma fábrica estática que permite que as matrizes sejam exibidas como listas.
Métodos para manipular matrizes é o que me leva a essa conclusão, pois copiar uma matriz para outra certamente é manipulação de matriz , certo?
Então, minha pergunta: por que é arraycopy()
em System
?
É uma relíquia de uma System
implementação inicial da classe Java ? O método não está marcado como obsoleto, então estou um pouco perdido. Além disso, ele não segue o padrão Java camelCase, o que me leva a pensar que é uma relíquia do design inicial da biblioteca.
Respostas:
System.arraycopy
é implementado nativamente por cada JVM. Aqui está a declaração do método:Isso significa que ele faz a cópia da matriz da maneira mais rápida possível nas instruções de montagem nativas. A idéia é que essa seja uma funcionalidade potencialmente lenta e potencialmente lenta que o Java deve fornecer esse comportamento em um nível baixo.
Outras maneiras de copiar matrizes envolvem
System.arraycopy
ou usam loops interpretados, o que não seria tão eficiente.fonte
native
métodosSystem
? Ao nomear convenções, meio que faz sentido, porque elas dependem do sistema , mas do ponto de vista organizacional,arraycopy
faria sentido ser definido naArray
classe ou algo semelhante e ter sua implementação nativa lá. Pessoalmente, useiarraycopy
apenas uma vez em meus 5 anos de programação.native
métodos estejam inseridosSystem
, não hánative
métodosjava.util.Arrays
.O System.arraycopy é uma das partes mais antigas da biblioteca, enquanto o java.util.Arrays foi adicionado no 1.2. Eu não chamaria de arraycopy uma relíquia, pois não há nada que a substitua diretamente, e os vários métodos de cópia em Arrays são implementados em termos disso.
Não há nada de especial no sistema ou nas matrizes que exijam que os métodos nativos estejam em um ou os impeçam de estar no outro.
fonte