Avatar ·

Как просто и красиво вывести массив в Java на экран?

Всем привет! Я только начал изучать Java и столкнулся с, казалось бы, простой задачей: вывести содержимое массива в консоль. Но всё пошло не по плану.

У меня есть такой код:

public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        System.out.println(numbers);
    }
}

Я ожидал увидеть что-то вроде [1, 2, 3, 4, 5], но вместо этого в консоль выводится какая-то белиберда: [I@1b6d3586. Что это за странный вывод? Я перепробовал разные массивы (строки, числа) — результат всегда похожий: [Ljava.lang.String;@2f92e0f4 и так далее.

Я читал, что у массива есть метод toString(), но он тоже не работает как надо. Пробовал Arrays.toString(), но IDE подчёркивает красным, говорит, что такого метода нет. Может, я что-то импортирую не так?

Подскажите, пожалуйста, как правильно и просто вывести массив в Java? Хочется, чтобы элементы были видны, а не эти непонятные хэш-коды. Заранее спасибо!

<<>>

Правильный способ вывода массива в Java

Проблема, с которой вы столкнулись, — классическая ловушка для новичков. Дело в том, что System.out.println() вызывает метод toString() у переданного объекта. А у массивов стандартный toString() не переопределён — он просто выводит хеш-код объекта в формате: [тип@хеш.

Например:

  • [I — массив int
  • [Ljava.lang.String; — массив строк
  • Цифры после @ — хеш-код объекта

Чтобы красиво вывести содержимое массива, используйте статический метод Arrays.toString() из пакета java.util. Вот как это работает:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};
        System.out.println(Arrays.toString(numbers));
        // Вывод: [1, 2, 3, 4, 5]
    }
}

Что делает Arrays.toString()?

Метод Arrays.toString() проходит по всем элементам массива и собирает их в строку в формате [элемент1, элемент2, ...]. Он корректно обрабатывает:

  • Примитивные массивы (int[], double[], char[] и т.д.)
  • Массивы объектов (String[], Integer[], свои классы)
  • null-элементы — выводит null

Многомерные массивы

Если у вас двумерный или многомерный массив, Arrays.toString() не подойдёт — он выведет только хеш-коды вложенных массивов. Для таких случаев используйте Arrays.deepToString():

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[][] matrix = {{1, 2}, {3, 4}, {5, 6}};
        
        // Неправильно:
        System.out.println(Arrays.toString(matrix));
        // Вывод: [[I@1b6d3586, [I@2f92e0f4, [I@28a418fc]
        
        // Правильно:
        System.out.println(Arrays.deepToString(matrix));
        // Вывод: [[1, 2], [3, 4], [5, 6]]
    }
}

Если нужно вывести массив в столбик

Иногда требуется каждый элемент на новой строке. Тогда можно использовать цикл for-each:

int[] numbers = {10, 20, 30};
for (int n : numbers) {
    System.out.println(n);
}
// Вывод:
// 10
// 20
// 30

Или с помощью Stream API (Java 8+):

Arrays.stream(numbers).forEach(System.out::println);

Что делать, если IDE ругается на Arrays.toString()?

Убедитесь, что вы добавили импорт:

import java.util.Arrays;

Без этого компилятор не увидит метод. Если используете IntelliJ IDEA, нажмите Alt+Enter на красном подчёркивании — IDE сама предложит импорт.

Вот краткая шпаргалка:

  • Одномерный массив — Arrays.toString(arr)
  • Многомерный массив — Arrays.deepToString(arr)
  • В столбик — цикл for-each или Stream API

Теперь вы никогда не запутаетесь! 😊

<<>>

Альтернативные способы: ручной перебор и StringBuilder

Если по каким-то причинам вы не хотите использовать Arrays.toString() (например, в учебных целях или для нестандартного форматирования), можно собрать строку вручную с помощью StringBuilder или StringJoiner.

Пример с StringBuilder:

int[] numbers = {1, 2, 3, 4, 5};
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < numbers.length; i++) {
    sb.append(numbers[i]);
    if (i < numbers.length - 1) {
        sb.append(", ");
    }
}
sb.append("]");
System.out.println(sb.toString());
// Вывод: [1, 2, 3, 4, 5]

Пример с StringJoiner (Java 8+):

import java.util.StringJoiner;

int[] numbers = {1, 2, 3, 4, 5};
StringJoiner joiner = new StringJoiner(", ", "[", "]");
for (int n : numbers) {
    joiner.add(String.valueOf(n));
}
System.out.println(joiner.toString());
// Вывод: [1, 2, 3, 4, 5]

Эти способы дают полный контроль над форматированием: можно менять разделители, добавлять префиксы/суффиксы, выводить элементы с дополнительной информацией. Однако в 99% случаев Arrays.toString() — это самое простое и надёжное решение.

Ещё один лайфхак: если вы часто выводите массивы, можно создать свою утилитную функцию:

public static String arrayToString(int[] arr) {
    return Arrays.toString(arr);
}

Но это уже излишество — стандартный метод отлично справляется.