Подтвердить что ты не робот

Разница между печатью char и int массивами в Java

Когда я запускаю следующий код, я получаю адрес массива:

int arr[] = {2,5,3};
System.out.println(arr); // [[email protected]

Но когда я объявляю массив символов и печатаю его так же, как он дает мне фактическое содержимое массива. Почему?

char ch[] = {'a','b','c'};
System.out.println(ch); // abc
4b9b3361

Ответ 1

Класс PrintStream (что есть System.out) имеет выделенный метод перегрузки println(char[]), который печатает символы char.

У него нет специальных перегрузок для других массивов, поэтому, когда вы передаете int[], вызываемый метод println(Object). Этот метод преобразует переданный объект в строку, вызывая его метод toString().

Метод toString() для всех массивов - это по умолчанию один унаследованный из класса Object, который отображает их имя класса и хэш-код по умолчанию, поэтому он не настолько информативен. Вы можете использовать Arrays.toString(int[]), чтобы получить строковое представление содержимого массива int.

P.S. Вопреки тому, что говорит документ, хэш-код по умолчанию для объекта обычно не является адресом объекта, а случайно сгенерированным номером.

Ответ 2

Когда вы говорите System.out.println(ч);

Это приводит к вызову печати (char [] s), а затем println()

JavaDoc для println говорит:

Печать символа, а затем завершение строки. Этот метод ведет себя так, как будто он вызывает печать (char), а затем println().

Целочисленная переменная не является char, поэтому print (int [] s) получает адрес массива.