Метод Arrays.deepToString() в Java - Вопросы
Всего: 5 вопросов
1. Что делает метод Arrays.deepToString() и какова его сигнатура?
Что делает метод Arrays.deepToString() и какова его сигнатура?
Метод public static String deepToString(Object[] a) из класса java.util.Arrays возвращает строковое представление многомерного массива. Он рекурсивно обходит вложенные массивы и выделяет каждый уровень вложенности квадратными скобками. Это самый короткий способ вывести двумерный или многомерный массив в консоль без циклов.
2. Чем Arrays.deepToString() отличается от Arrays.toString()?
Чем Arrays.deepToString() отличается от Arrays.toString()?
Arrays.toString() обходит только первый уровень массива: каждый элемент преобразуется вызовом его собственного toString(). Для двумерного массива элементами первого уровня являются вложенные массивы, а они не переопределяют toString() — поэтому печатаются тип и хеш-код, например [[Ljava.lang.String;@1b6d3586, ...]. Arrays.deepToString() обходит массив рекурсивно и выводит содержимое всех уровней вложенности.
3. Можно ли передать в deepToString() одномерный массив int[] и двумерный int[][]?
Можно ли передать в deepToString() одномерный массив int[] и двумерный int[][]?
Одномерный int[] передать нельзя: код не скомпилируется, потому что int[] не приводится к Object[]. Для одномерных массивов примитивов есть перегрузки Arrays.toString(). А вот int[][] передать можно: его элементы первого уровня — это объекты типа int[], поэтому массив совместим с параметром Object[], и вывод будет вида [[1, 2, 3], [4, 5, 6]].
4. Что вернёт deepToString(), если массив равен null, содержит null-элементы или ссылается сам на себя?
Что вернёт deepToString(), если массив равен null, содержит null-элементы или ссылается сам на себя?
Если аргумент равен null, метод возвращает строку "null". Вложенные null-элементы также печатаются как null. Если массив прямо или косвенно содержит ссылку на самого себя, вместо бесконечной рекурсии на этом месте выводится "[...]" — например, [первый, [...]].
5. Какие парные методы класса Arrays используют «глубокую» семантику для многомерных массивов, помимо deepToString()?
Какие парные методы класса Arrays используют «глубокую» семантику для многомерных массивов, помимо deepToString()?
Для сравнения и хеширования многомерных массивов у класса Arrays есть методы Arrays.deepEquals() и Arrays.deepHashCode(). Они, как и deepToString(), рекурсивно обходят все уровни вложенности, в отличие от «поверхностных» Arrays.equals() и Arrays.hashCode().