Java getBytes () - PullRequest
       9

Java getBytes ()

4 голосов
/ 07 апреля 2010

Знаете ли вы проблему, почему я не получаю Привет

byte f []  ="hello".getBytes();

System.out.println(f.toString());

Ответы [ 5 ]

11 голосов
/ 07 апреля 2010

Поскольку byte[]#toString() (обычно) не реализуется как new String(byteArray), что приведет к ожидаемому результату (например, System.out.println(new String(byteArray));.

Возможно, вы захотите дать этой странице глаз ...

0 голосов
/ 29 августа 2013

, поскольку f не является string, вызывается метод toString() класса object, а не класса String.toString из String класса возвращает String и toString из object класса возвращает:

getClass().getName() + '@' + Integer.toHexString(hashCode()) ..... aww aww не заходит слишком далеко ... это так же, как: classname.@hexadecimal код для хеш-кода

0 голосов
/ 07 апреля 2010

Причина, по которой вы получаете "странный" вывод из System.out.println(f.toString()), заключается в том, что вы печатаете массив, а не строку. Классы массива Java не переопределяют метод toString(). Поэтому вызываемый метод toString() - это метод из java.lang.Object, который определен для вывода имени класса объекта и его хэш-кода идентификатора. (В этом случае имя класса byte[] будет «[b».)

Я думаю, что ваша путаница возникает из-за того, что вы мысленно приравниваете строку и массив байтов. Есть две причины, почему это концептуально неправильно:

  • В Java строки не являются массивами чего-либо. Класс String - полностью инкапсулированный класс, который не может быть приведен ни к чему другому ... кроме Object.

  • В Java String моделирует последовательность символов, а не последовательность байтов.

Последнее является ключевым отличием, поскольку существует множество возможных преобразований между последовательностями символов и байтами, многие из которых имеют потери в одном или обоих направлениях. Когда вы звоните "hello".getBytes(), вы получаете преобразование, подразумеваемое кодировкой символов вашей платформы по умолчанию, но вы могли бы предоставить параметр для getBytes, чтобы использовать другую кодировку в преобразовании.

0 голосов
/ 07 апреля 2010

Невозможно выполнить преобразование между байтовым массивом и строкой без предоставления метода кодирования.

Попробуйте System.out.println(new String(f, "UTF8"));

0 голосов
/ 07 апреля 2010

Поскольку метод toString байтового массива не печатает его содержимое (вообще). И байты не символы в любом случае. Почему вы ожидаете увидеть "hello"? Почему бы не сделать System.out.println("hello") напрямую?

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