深入 JAVA里面关于byte数组和String之间的转换问题
把byte转化成string,必须经过编码。
例如下面一个例子:
importjava.io.UnsupportedEncodingException; publicclass test{ publicstatic void main(String g[]) { Strings = "12345abcd"; byteb[] = s.getBytes(); Stringt = b.toString(); System.out.println(t); } }
输出字符串的结果和字符串s不一样了.
经过以下方式转码就可以正确转换了:
publicclass test{ publicstatic void main(String g[]) { Strings = "12345abcd"; byteb[] = s.getBytes(); try{ Stringt = new String(b); System.out.print(t); }catch (Exception e) { e.printStackTrace(); } } }
Stringstr = "String"; byte[]byte1 = str.getBytes(); Stringstr1 = new String(byte1); byte[]byte2 = str1.getBytes(); Stringstr2 = new String(byte2); System.out.println("str<<<"+ str); System.out.println("byte1<<<"+ byte1); System.out.println("str1<<<"+ str1); System.out.println("byte2<<<"+ byte2); System.out.println("str2<<<"+ str2);
-------------------------------------
输出结果
str<<<String
byte1<<<[B@192d342
str1<<<String
byte2<<<[B@6b97fd
str2<<<String
想请教为什么两个byte输出的不一样呢?
Stringstr = "String";
byte[]byte1 = str.getBytes();
Stringstr1 = new String(byte1);
byte[]byte2 = str1.getBytes();
----------
注意byte1是str得到的byte数组,而byte2是另一个字符串str1得到的数组
他们本身也是两个对象
直接打印实际上调用的是toString()方法,而toString()的默认实现是打印对象类型+hashCode()
[B表示byte数组
@表示之后的是地址
后面跟着的是hashCode,其实就是其虚拟机地址
所以这个结果也就是顺理成章了.