Ao substituir loops for por loops for-each, os desenvolvedores geralmente encontram o seguinte padrão:
for (int i = 0, n = a.length; i Em vez do mais simples:
for (int i = 0; i Isso levanta a questão: a atribuição extra n = a.length é um impacto no desempenho dos arrays?
A resposta
Não, uma chamada para array.length é uma operação O(1) ou de tempo constante.
A propriedade .length de um array é um membro final público e o acesso a ele não é mais lento do que uma variável local. Isso é diferente de chamadas de método como size(), que normalmente envolvem mais sobrecarga.
Os compiladores JIT modernos também podem otimizar a chamada para .length para eliminá-la completamente. Para verificar isso, pode-se inspecionar o código-fonte do compilador JIT ou examinar o código nativo despejado.
No entanto, o compilador JIT pode nem sempre ser capaz de realizar essa otimização, como quando a depuração está habilitada ou quando o corpo do loop contém variáveis locais excessivas.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3