Вывод преобразованного массива символов из строки (Java)
Дорогие товарищи, добрый день! Прошу прощения за вопрос, но в голове не укладывается. Суть такова, имеем строку, преобразовываем её в массив с помощью метода toCharArray и выводим массив на экран. Как мы знаем, массив просто так вывести не получится и надо пробегать по его ячейкам с помощью циклов. Что я и сделал, но потом решил попробовать вывести преобразование сразу на экран, по моей логике это не должно было сработать, так как метод преобразования строки в массив символов toCharArray() возвращает массив символов, а его просто так не вывести на экран. Наведите пожалуйста на правильную мысль, если можно более простым языком, я только изучаю программирование, простые для вас вещи сложны для меня. Спасибо. Прилагаю код.
public class Main {
public static void main(String[] args) {
String str = "ABCDF";
System.out.println(str.toCharArray());
//char[] charFromString = str.toCharArray(); // {A, B, C, D, F}
// check our array
//for (char i : charFromString) {
// System.out.print(i + " ");
//}
}
}
Ответы (1 шт):
Преобразование массивов в строку
Когда в Java говорят о том, что «массив просто так не вывести на экран», то имеют ввиду то, что метод toString для массивов возвращает не текстовое представление содержимого массива (что ожидается), а некую строку содержащую тип и адрес памяти:
int[] array = new int[10];
System.out.println(array); //[I@54bedef2
Метод toString работает аналогичным образом и для массивов char:
String str = "ABCDF";
System.out.println(str.toCharArray().toString()); //[C@2ff4acd0
Обычно если нужно вывести содержимое массива в строку используют методы Arrays.toString или Arrays.deepToString (для многомерных массивов):
System.out.println(Arrays.toString(str.toCharArray())); //[A, B, C, D, F]
Вывод массива символов
Почему же System.out.println(str.toCharArray()) выводит строку? Потому что поле System.out возвращает экземпляр класса PrintStream, а этот класс перегружает метод println именно для массивов типа char[].
Посмотрите документацию этого метода:
Prints an array of characters and then terminate the line. This method behaves as though it invokes
print(char[])and thenprintln().
Выводит массив символов и затем завершает строку. Метод ведет как если бы вызвалиprint(char[])и затемprintln()
А также документацию print(char[]):
Prints an array of characters. The characters are converted into bytes according to the platform's default character encoding, and these bytes are written in exactly the manner of the
write(int)method.
Выводит массив символов. Символы преображаются в байты согласно кодировке по-умолчанию платформы, затем эти байты записываются точно так же как в методеwrite(int)
Получается что метод println позволяет сразу вывести массив символов как текст. Поэтому именно массив символов можно «просто так» вывести на экран. В отличие от метода Arrays.toString массив выводится без разделителей, как обычная строка.