Java почему используется Arrays.toString для массивов типа String при выводе на экран?

Имеем:

int scores = {1, 2, 3};
char[] symbols = {'a', 'b'};
String str = {"Hello", "World"};

Понимаю, что при выводе на экран массива типа int мы должны использовать Arrays.toString(), чтобы массив преобразовать в строку и System.out.println() показал массив а не адрес памяти.

System.out.println(Arrays.toString(scores)); // [1, 2, 3]

System.out.println(scores); // [I@5e9f23b4

Так как массив из символов тоже можно считать строкой можно передать массив символов как аргумент в System.out.println() и все будет норм.

System.out.println(symbols); // ab

Так почему же тот же принцип не работает с массивами типа String, и почему я должен использовать Arrays.toString()?

System.out.println(str); // [Ljava.lang.String;@5e9f23b4

System.out.println(Arrays.toString(str)); // ["Hello", "World"]


Ответы (1 шт):

Автор решения: Chubatiy

потому что для вывода char - специальный метод в System.out.println со своей обработкой

А массив String воспринимается как массив объектов. И там вызывается как раз String.valueOf(str) для получения строки вывода

А как раз Arrays.toString(str) уже непосредственно преобразовывает все значения массива в строку

→ Ссылка