java String.valueOf проблема

61
5

Я написал этот код:

byte[] test = {-51};
byte[] test2 = {-51};
byte[] test3 = {-51};
System.out.println(String.valueOf(test));
System.out.println(String.valueOf(test2));
System.out.println(String.valueOf(test3));

И у меня разные результаты:

[B@9304b1
[B@190d11
[B@a90653

Зачем?

спросил(а) 2021-01-19T19:22:56+03:00 2 месяца, 3 недели назад
1
Решение
87

Номера, которые вы видите, являются хэш-кодами объектов массива.

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

System.out.println(Arrays.toString(test));
System.out.println(Arrays.toString(test2));
System.out.println(Arrays.toString(test3));

ответил(а) 2021-01-19T19:22:56+03:00 2 месяца, 3 недели назад
62

toString pf любой массив не использует значения в массиве для создания строки, в которой вы можете использовать Arrays.toString(test); для этого

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

String.valueOf не имеет аргумента byte [], поэтому он будет обработан как Object и будет вызван метод toString(), поскольку массивы не реализуют этот метод, Object.toString() будет процессом в массиве и результат зависит от каждого экземпляра.

Если вы хотите преобразовать byte[] в String, используйте конструктор String (byte []) или String (byte [] bytes, Charset charset)

byte[] test = {-51};
byte[] test2 = {-51};
byte[] test3 = {-51};
System.out.println(new String(test));
System.out.println(new String(test2));
System.out.println(new String(test3));

Результат:

Í
Í
Í

Если вы хотите просмотреть содержимое массива, используйте Arrays.toString(byte [])

byte[] test = {-51};
byte[] test2 = {-51};
byte[] test3 = {-51};
System.out.println(Arrays.toString(test));
System.out.println(Arrays.toString(test2));
System.out.println(Arrays.toString(test3));

Результат:

[-51]
[-51]
[-51]

ответил(а) 2021-01-19T19:22:56+03:00 2 месяца, 3 недели назад
44

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

ответил(а) 2021-01-19T19:22:56+03:00 2 месяца, 3 недели назад
45

Поскольку для байтового массива нет String.valueOf, когда вы String.valueOf(Object obj) его byte[], он использует String.valueOf(Object obj).

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

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