инициализация байтового массива в Java по его значению?

62
9

поэтому у меня есть значение байта строки. Например, через:

String str="Test String";
System.out.println(str.getBytes());

который дает мне:

[B@1339a0dc

могу ли я использовать это для инициализации массива байтов, такого как:

byte[] bytes=new bytes("[B@1339a0dc");

или что-то?

спросил(а) 2021-01-19T15:59:50+03:00 2 месяца, 3 недели назад
1
Решение
75

getBytes возвращает массив byte. Таким образом, вы можете:

byte[] bytes = str.getBytes(); 

непосредственно.

[B@1339a0dc - это просто ссылка на объект, представленная как строка, это не фактический массив байтов

ответил(а) 2021-01-19T15:59:50+03:00 2 месяца, 3 недели назад
61

Нет. Имя класса ([B 1339a0dc byte[]) и hashcode (1339a0dc - это хэш-код в шестнадцатеричном формате). Хэши нельзя отменить, поскольку они не являются биективными.

Почему это печатает это? Потому что вы используете неявный toString(). Эта:

System.out.println(str.getBytes());

переводится компилятором следующим образом:


System.out.println(str.getBytes().toString());

потому что System.out.println() принимает аргумент String как аргумент, поэтому здесь подразумевается неявное преобразование.

Таким образом, вы используете стандартную реализацию Object#toString(), которая работает, как я объяснял ранее (более подробная информация в документации)

ответил(а) 2021-01-19T15:59:50+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема