Массивы ·
‹ Previous Next ›
⏱ 5 min read Modified: 2026-07-13

Метод Arrays.deepToString() в Java

Метод Arrays.deepToString() в Java возвращает строковое представление многомерного массива: он рекурсивно обходит вложенные массивы и выделяет каждый уровень квадратными скобками. Это самый короткий способ вывести двумерный или многомерный массив в консоль без циклов. Метод объявлен в классе java.util.Arrays:

public static String deepToString(Object[] a)

Пример: двумерный массив в строку

Передадим методу двумерный массив строк — Arrays.deepToString() вернёт содержимое обоих уровней вложенности:

import java.util.Arrays;

public class ArraysDeepToStringExample {
    public static void main(String[] args) {
        String[][] array = {{"один-один", "один-два", "один-три"},
                {"два-один", "два-два", "два-три"}};
        System.out.println(Arrays.deepToString(array));
    }
}

Вывод программы:

[[один-один, один-два, один-три], [два-один, два-два, два-три]]

Внешние скобки соответствуют всему массиву, внутренние — каждой его строке. Метод работает с любой глубиной вложенности: трёхмерный массив даст три уровня скобок, и так далее.

Отличие от Arrays.toString()

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

String[][] array = {{"один-один", "один-два"}, {"два-один", "два-два"}};

System.out.println(Arrays.toString(array));
System.out.println(Arrays.deepToString(array));

Вывод программы:

[[Ljava.lang.String;@1b6d3586, [Ljava.lang.String;@4554617c]
[[один-один, один-два], [два-один, два-два]]
Метод Принимает Как обходит Когда использовать
Arrays.toString() Одномерный массив (примитивы или объекты) Только первый уровень Вывести одномерный массив
Arrays.deepToString() Object[] (в том числе int[][], String[][]) Рекурсивно, все уровни вложенности Вывести двумерный и многомерный массив

Массивы примитивов

Двумерный массив примитивов, например int[][], передать в deepToString() можно: его элементы первого уровня — это объекты типа int[], поэтому такой массив совместим с параметром Object[]:

int[][] matrix = {{1, 2, 3}, {4, 5, 6}};
System.out.println(Arrays.deepToString(matrix));

Вывод программы:

[[1, 2, 3], [4, 5, 6]]

Важно

Одномерный массив примитивов передать в deepToString() нельзя: Arrays.deepToString(new int[]{1, 2, 3}) не скомпилируется, потому что int[] не приводится к Object[]. Для одномерных массивов используйте перегрузки Arrays.toString() — они есть для всех примитивных типов.

null и самоссылающиеся массивы

Метод аккуратно обрабатывает граничные случаи, на которых «ручной» рекурсивный вывод обычно падает:

  • если аргумент равен null, возвращается строка "null";
  • вложенные null-элементы также печатаются как null;
  • если массив прямо или косвенно содержит ссылку на самого себя, вместо бесконечной рекурсии на этом месте выводится "[...]".
Object[] selfRef = new Object[2];
selfRef[0] = "первый";
selfRef[1] = selfRef; // массив ссылается сам на себя

System.out.println(Arrays.deepToString(selfRef));

Вывод программы:

[первый, [...]]

Для сравнения и хеширования многомерных массивов в классе Arrays есть парные методы с той же «глубокой» семантикой — Arrays.deepEquals() и Arrays.deepHashCode().

Часто задаваемые вопросы

Чем Arrays.deepToString() отличается от Arrays.toString()?

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

Можно ли передать в deepToString() одномерный массив int[]?

Нет, код не скомпилируется: метод принимает Object[], а массив примитивов int[] к этому типу не приводится. Для одномерного массива примитивов используйте Arrays.toString(). При этом int[][] передать можно — его элементы первого уровня сами являются объектами.

Как вывести двумерный массив в Java без deepToString()?

Вложенными циклами for: внешний идёт по строкам, внутренний по элементам строки. Либо одним циклом по строкам, печатая каждую через Arrays.toString(row) — так каждая строка матрицы выводится с новой строки, что удобнее для больших таблиц.

Что вернёт deepToString(), если массив содержит null или ссылается сам на себя?

Для аргумента null метод возвращает строку "null", вложенные null-элементы печатаются как null. Если массив содержит ссылку на самого себя, вместо бесконечной рекурсии на этом месте выводится "[...]".

Презентация с видео на Patreon →

Video Explanation

Prefer video format? Watch this lesson with examples and explanations.

Comments

Please log in or register to have a possibility to add comment.