Метод Arrays.deepToString() в Java - Вопросы

Всего: 5 вопросов

1. 

Что делает метод Arrays.deepToString() и какова его сигнатура?

Метод public static String deepToString(Object[] a) из класса java.util.Arrays возвращает строковое представление многомерного массива. Он рекурсивно обходит вложенные массивы и выделяет каждый уровень вложенности квадратными скобками. Это самый короткий способ вывести двумерный или многомерный массив в консоль без циклов.

2. 

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

Arrays.toString() обходит только первый уровень массива: каждый элемент преобразуется вызовом его собственного toString(). Для двумерного массива элементами первого уровня являются вложенные массивы, а они не переопределяют toString() — поэтому печатаются тип и хеш-код, например [[Ljava.lang.String;@1b6d3586, ...]. Arrays.deepToString() обходит массив рекурсивно и выводит содержимое всех уровней вложенности.

3. 

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

Одномерный int[] передать нельзя: код не скомпилируется, потому что int[] не приводится к Object[]. Для одномерных массивов примитивов есть перегрузки Arrays.toString(). А вот int[][] передать можно: его элементы первого уровня — это объекты типа int[], поэтому массив совместим с параметром Object[], и вывод будет вида [[1, 2, 3], [4, 5, 6]].

4. 

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

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

5. 

Какие парные методы класса Arrays используют «глубокую» семантику для многомерных массивов, помимо deepToString()?

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

Страница 1 из 1