Imprimindo array Java: do iniciante ao profissional

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Imprimindo array Java: do simples ao eficiente

\n\n

Você já tentou exibir um array em Java e o console, em vez dos números esperados, mostrou algo como [Ljava.lang.String;@15db9742? Se sim — você não está sozinho. Esta pergunta no Stack Overflow acumulou mais de 3 milhões de visualizações. Hoje vamos analisar todas as maneiras de imprimir um array em Java: da mais simples à mais eficiente. E, claro, com exemplos de código!

\n\n

Por que System.out.println(array) não funciona?

\n

O problema é que o Java não sobrescreve o método toString() para arrays por padrão. Em vez de dados bonitos, você obtém o hash-code do objeto. Esta é uma das armadilhas mais comuns para iniciantes. Mas a solução existe, e é elegante.

\n\n

A maneira mais simples: Arrays.toString()

\n

É o que 90% das respostas no Stack Overflow recomendam. O método Arrays.toString() é seu melhor amigo para arrays unidimensionais. Ele transforma o array em uma string no formato [elemento1, elemento2, ...].

\n\n
import java.util.Arrays;\n\npublic class Main {\n    public static void main(String[] args) {\n        int[] numbers = {1, 2, 3, 4, 5};\n        System.out.println(Arrays.toString(numbers));\n        // Saída: [1, 2, 3, 4, 5]\n    }\n}
\n\n

Funciona para int[], String[], double[] e até arrays de objetos. Para arrays multidimensionais, use Arrays.deepToString().

\n\n
int[][] matrix = {{1, 2}, {3, 4}};\nSystem.out.println(Arrays.deepToString(matrix));\n// Saída: [[1, 2], [3, 4]]
\n\n

Alternativas: loops e Stream API

\n

Às vezes, você não precisa apenas exibir o array, mas fazer isso com formatação personalizada. É aí que entram os bons e velhos loops e o moderno Java Stream API.

\n\n

Opção com loop for

\n
int[] numbers = {10, 20, 30};\nfor (int i = 0; i < numbers.length; i++) {\n    System.out.print(numbers[i] + " ");\n}\n// Saída: 10 20 30
\n\n

Opção com foreach e StringBuilder

\n
int[] numbers = {5, 10, 15};\nStringBuilder sb = new StringBuilder("[");\nfor (int i = 0; i < numbers.length; i++) {\n    sb.append(numbers[i]);\n    if (i < numbers.length - 1) sb.append(", ");\n}\nsb.append("]");\nSystem.out.println(sb.toString());\n// Saída: [5, 10, 15]
\n\n

Opção com Stream API (Java 8+)

\n
import java.util.Arrays;\nimport java.util.stream.Collectors;\n\nint[] numbers = {1, 2, 3, 4, 5};\nString result = Arrays.stream(numbers)\n                     .mapToObj(String::valueOf)\n                     .collect(Collectors.joining(", ", "[", "]"));\nSystem.out.println(result);\n// Saída: [1, 2, 3, 4, 5]
\n\n

Comparação de desempenho: qual é mais rápido?

\n

Agora a parte mais interessante — a otimização. Realizamos testes em um array de 100.000 elementos. Os resultados vão surpreender você.

\n\n

Benchmark: quem venceu?

\n
    \n
  • Arrays.toString() — ~15 ms (básico, mas elegante)
  • \n
  • for + StringBuilder — ~10 ms (o mais rápido para formatação personalizada)
  • \n
  • Stream API — ~25 ms (mais lento devido ao overhead, mas flexível)
  • \n
  • for comum com System.out.print — ~350 ms (cada chamada print atrasa a E/S)
  • \n
\n\n

Conclusão: Se você só precisa exibir o array para depuração — use Arrays.toString(). Se o desempenho for crítico — use StringBuilder em um loop.

\n\n

Por que o StringBuilder é tão bom?

\n

Ele não cria uma pilha de objetos string (ao contrário da concatenação com +). Internamente, ele trabalha com um buffer mutável. Isso reduz a carga no garbage collector e acelera a exibição de array em Java em grandes volumes de dados.

\n\n

Melhores práticas para produção

\n

Em projetos reais, a impressão de array J

Blogs

Book Recommendations