Почему метод toString в Java не работает для массива - PullRequest
33 голосов
/ 15 августа 2011

Я хочу преобразовать массив символов в строковый объект, используя метод toString () в Java.Вот фрагмент тестового кода, который я использовал:

import java.util.Arrays;
class toString{
    public static void main(String[] args){
        char[] Array = {'a', 'b', 'c', 'd', 'e', 'f'};
        System.out.println(Array.toString());
        }
}

В принципе, он должен печатать abcdef , но он печатает случайную тарабарщину, подобную [C @6e1408 или [C @ e53108 при каждом запуске программы.Мне не нужна альтернатива из этого, но я хочу знать, почему это происходит.

Ответы [ 9 ]

36 голосов
/ 15 августа 2011

Чтобы получить читабельный toString(), вы должны использовать Arrays.toString(), например:

System.out.println(Arrays.toString(Array));

Java toString() для массива - это печатать [, сопровождаемый символом, представляющим тип элементов массива (в вашем случае C для char), за которым следует @, затем "идентификационный хэш-код" массива (подумайте, что вы бы "адрес памяти ").

Это печальное положение вещей обычно рассматривается как" ошибка "с Java.

См. этот ответ для списка других" ошибок ",

32 голосов
/ 15 августа 2011

Я не знаю, откуда вы взяли, что «в принципе» должно быть напечатано «abcdef».Где это задокументировано?

Что-то вроде [C@6e1408 - это, безусловно, , а не случайная тарабарщина - это такой же способ построения строки из объекта, как и любой другой тип, который не переопределяет toString() наследует - это представление типа ([ обозначает массив; C обозначает тип примитива char), за которым следует идентификационный хэш-код в шестнадцатеричном виде.Подробнее см. Документацию для Object.toString().Как это бывает, массивы не переопределяют toString.

Если вы хотите [a, b, c, d, e, f], вы можете использовать Arrays.toString(char[]).Если вы хотите abcdef, вы можете использовать new String(char[]).

2 голосов
/ 12 апреля 2013

Просто используйте следующие команды, чтобы вывести ваш массив abcdef

    String a= new String(Array);

    System.out.println(a);

вот вам и проблема решена !! Теперь относительно того, почему печатается другой материал, я думаю, что эти парни выше поместили несколько полезных ссылок для этого. Хорошо, надо идти !!

1 голос
/ 15 августа 2011

Массивы не переопределяют toString. Есть статический метод: java.util.Arrays.toString, который должен решить вашу проблему.

import java.util.Arrays;
class toString {
    public static void main(String[] args){
        char[] Array = {'a', 'b', 'c', 'd', 'e', 'f'};
        System.out.println(Arrays.toString(Array));
    }
}
1 голос
/ 15 августа 2011

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

0 голосов
/ 20 июля 2018

Есть орфографическая ошибка "Array.toString ()" для "Arrays.toString (Array)" Я так думаю, и вместо записи name.toString () передайте имя в качестве аргумента и запишите как указано выше.

0 голосов
/ 26 апреля 2018
char[] Array = { 'a', 'b', 'c', 'd', 'e', 'f' };
System.out.println(Array);

Следует напечатать abcdef.

0 голосов
/ 06 февраля 2012

так, как я нашел, сработало:

public String convertToString(char[] array, int length)
{
String char_string;
String return_string="";
int i;

   for(i=0;i<length;i++)
   {
       char_string=Character.toString(array[i]);
       return_string=return_string.concat(char_string);
   }
   return return_string;
}
0 голосов
/ 15 августа 2011

Реализация по умолчанию метода toString класса char [] возвращает строковое представление базового адреса массива, который печатается здесь. Мы не можем изменить его, так как класс char [] не является расширяемым.

...