Печать массива примитивов в Java - PullRequest
1 голос
/ 27 октября 2011

У меня есть два массива:

char[] chars = { '1', '2', '3' };
int[] numbers = { 1, 2, 3 };

Почему после звонка System.out.print(chars) я получаю 123, а после System.out.print(numbers) у меня что-то вроде [C@9304b1?

Более того, после печати System.out.print("abc" + chars) Я также получаю abc[C@9304b1.

Я знаю, что [C@9304b1 равен методу chars.toString (), но почему иногда System.out.print печатает только его элементы?

Ответы [ 3 ]

4 голосов
/ 27 октября 2011

PrintStream, тип System.out, имеет несколько перегрузок для метода print, одна из которых принимает массив символов (char[]):

public void print(char[] s)

Печатает массив символов. символы преобразуются в байты в соответствии с платформой кодировка символов по умолчанию, и эти байты записаны именно в способ записи (int).

Таким образом, в первом примере вы напечатали 123. Однако PrintStream не имеет перегрузки для print, которая может принять int[] в качестве аргумента, таким образом, вы в конечном итоге вызовете print(Object), который будет использовать метод toString Object, состоящий из его типа и хеш-кода.

Для печати int[] вместо него можно использовать Arrays.toString().

0 голосов
/ 27 октября 2011

Причина в том, что System.out.print может принимать массив символов и преобразовывать его в печатный текст, что дает строку «123», но массив целых чисел не имеет неявного метода для отображения себя в виде текста, поэтому он просто отображает адрес массива.

0 голосов
/ 27 октября 2011

Поскольку toString () по умолчанию просто выводит значение по умолчанию «вот что / где находится этот объект», а разные типы делают разные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...