我写了这段代码:
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
为什么?
答案 0 :(得分:3)
您看到的数字是hash codes of the array objects。
要查看数组的内容,请使用Arrays.toString()
:
System.out.println(Arrays.toString(test));
System.out.println(Arrays.toString(test2));
System.out.println(Arrays.toString(test3));
答案 1 :(得分:1)
数组的toString不使用数组中的值来创建可以使用Arrays.toString(test);
的字符串
答案 2 :(得分:1)
String.valueOf没有byte []参数,因此它将被处理为Object
并且将调用toString()
方法,因为数组不实现此方法,{ {3}}将在数组中处理,其结果因每个实例而异。
如果您想将byte[]
转换为String,请使用构造函数Object.toString()或String(byte[])
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));
结果:
Í
Í
Í
如果要查看数组的内容,请使用String(byte[] bytes, Charset charset)
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]
答案 3 :(得分:0)
ValueOf()
只调用给定对象的toString()
。如果要打印数组内容,请改为使用Arrays.toString()
。
答案 4 :(得分:0)
由于字节数组没有String.valueOf
,因此当您提供byte[]
时,它会使用String.valueOf(Object obj)
。