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

Почему метод toString в java не работает для массива

Я хочу преобразовать массив символов в строковый объект, используя метод 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 > каждый раз, когда программа выполняется. Мне не нужна альтернатива из этого, но вы хотите знать, почему это происходит.

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

    String a= new String(Array);

    System.out.println(a);

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

Ответ 4

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

Ответ 5

Массивы не переопределяют 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));
    }
}

Ответ 6

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

Ответ 7

таким образом я нашел работу:

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;
}