Метод Arrays.toString() в Java
Метод Arrays.toString() возвращает строковое представление одномерного массива в Java: элементы перечисляются через запятую с пробелом и заключаются в квадратные скобки. Это самый короткий способ вывести массив на консоль — вместо перебора элементов циклом for достаточно одного вызова. Метод статический, находится в классе java.util.Arrays, поэтому в начале файла нужен импорт import java.util.Arrays;.
Как работает Arrays.toString()
Передаём одномерный массив в метод — получаем готовую строку:
import java.util.Arrays;
public class ArraysToStringExample {
public static void main(String[] args) {
int[] array = {1, 4, 6, 3, 8};
System.out.println(Arrays.toString(array));
}
} Вывод на консоль:
[1, 4, 6, 3, 8] Метод работает с массивами любого типа. Для массива строк String[] каждый элемент попадает в результат как есть, без кавычек:
String[] names = {"Anna", "Boris", "Clara"};
System.out.println(Arrays.toString(names)); // [Anna, Boris, Clara] Полное описание всех перегрузок метода есть в официальной документации Oracle по классу Arrays.
Важно
У Arrays.toString() девять перегрузок: по одной для каждого из восьми примитивных типов (int[], long[], double[], char[] и т.д.) и одна для Object[]. Поэтому метод принимает массив любого типа — отдельно ничего преобразовывать не нужно.
Почему массив печатается как [I@1b6d3586
Если передать массив в System.out.println() напрямую, вместо элементов на консоль попадёт что-то вроде [I@1b6d3586:
int[] array = {1, 4, 6, 3, 8};
System.out.println(array); // [I@1b6d3586
System.out.println(Arrays.toString(array)); // [1, 4, 6, 3, 8] Дело в том, что массив в Java — объект, но метод toString() в нём не переопределён. Срабатывает реализация по умолчанию из класса Object: имя типа ([I — одномерный массив int), символ @ и хеш-код в шестнадцатеричном виде. Никакой информации об элементах в такой строке нет — именно поэтому и нужен Arrays.toString(). С двумерным массивом та же проблема повторяется на каждом уровне вложенности — для таких случаев есть отдельный метод Arrays.deepToString(), подробно разобранный в уроке «Метод Arrays.deepToString()».
Сравнение способов вывода массива
| Способ | Для каких массивов | Результат |
|---|---|---|
| System.out.println(array) | Любой (кроме char[]) | Тип и хеш-код: [I@1b6d3586 |
| Arrays.toString(array) | Одномерный любого типа | [1, 4, 6, 3, 8] |
| Arrays.deepToString(array) | Многомерный (Object[]) | [[1, 2, 3], [4, 5, 6]] |
| String.join(", ", array) | String[] и CharSequence[] | Anna, Boris, Clara — без скобок |
Как преобразовать массив в строку без скобок
Arrays.toString() всегда добавляет квадратные скобки и запятые. Если нужно преобразовать массив в строку в своём формате — например, для записи в файл или формирования сообщения, — используйте String.join() для массива строк:
String[] names = {"Anna", "Boris", "Clara"};
String result = String.join(", ", names);
System.out.println(result); // Anna, Boris, Clara Для массива примитивов подойдёт Stream API с Collectors.joining():
int[] array = {1, 4, 6, 3, 8};
String result = Arrays.stream(array)
.mapToObj(String::valueOf)
.collect(Collectors.joining(", "));
System.out.println(result); // 1, 4, 6, 3, 8 Разделитель в обоих случаях может быть любым: дефис, перенос строки, точка с запятой.
Смежные темы, которые пригодятся при работе с массивами: длина массива, сортировка через Arrays.sort() и преобразование массива в список и обратно.
Часто задаваемые вопросы
Что вернёт Arrays.toString(), если передать null?
Строку "null" — исключение не выбрасывается. Это удобно при отладке: метод безопасно печатает и неинициализированные ссылки на массив.
Почему System.out.println(charArray) печатает символы, а не хеш-код?
Для char[] у println() есть отдельная перегрузка, которая выводит содержимое массива как текст. Это единственный тип массива с таким поведением — остальные печатаются как тип и хеш-код. Arrays.toString(charArray) при этом выведет символы через запятую: [h, e, l, l, o].
Как вывести массив объектов своего класса?
Arrays.toString() вызывает toString() у каждого элемента. Если в вашем классе метод toString() не переопределён, вместо полей объектов вы увидите список вида ClassName@хеш-код. Переопределите toString() в классе — и вывод станет читаемым.
Можно ли сравнивать массивы через Arrays.toString()?
Технически строки можно сравнить, но это лишняя работа и риск неочевидных ошибок. Для сравнения содержимого массивов предназначены Arrays.equals() (одномерные) и Arrays.deepEquals() (многомерные).
Видео объяснение
Предпочитаете видеоформат? Посмотрите этот урок с примерами и объяснениями.
Комментарии