byte[] b={1,3,6,8,5,0,3,5,7,6,89};
String str=new String(b);
System.out.println(str);结果乱码怎么回事?
但当字节数组里的元素为字符时就没有问题
byte[] b2={'3','d','5','g','9','c','6',','};
String str2=new String(b2);
System.out.println(str2);这是什么情况啊?
乱码string
String str=new String(b);
System.out.println(str);结果乱码怎么回事?
但当字节数组里的元素为字符时就没有问题
byte[] b2={'3','d','5','g','9','c','6',','};
String str2=new String(b2);
System.out.println(str2);这是什么情况啊?
乱码string
String str=new String(b);
System.out.println(str);
//{1,3,6,8,5,0,3,5,7,6,89};
这里代表的都是16进制的数字,
20多之前的对应的都是不显示的一种符号。
貌似只有89能显示。。
我个人觉得,首先你定义的这个数组是字节数组,相当于数值型。
如果要转成字符串型的话,那可能就会先把byte数据默认转成char型数据,然后再转成字符串。
以上是我个人理解。
而由低到高的默认转,其实是把你这里的数值看成为ASCII码,
就好比字符A对应的ASCII码为65
具体请看下ASCII码对照。
这不是字符数组!'1'表示字符
String str=new String(b);
char c=5;
System.out.println(c);
编译时没有问题,但输出就出问题了呢
byte[] b={1,3,6,8,5,0,3,5,7,6,89};
其中 十进制ASCII码 0对应的是空格,89对应的Y,
所以,显示的乱码中,第6个是空格,最后一个是'Y'而
byte[] b2={'3','d','5','g','9','c','6',','};
b2字节数组,存放的是各个字符的ascii码的十进制。
如果直接 print b2,会打印出
51,100,53,103,57,99,54,44
如果将b2转换成String, 则b2的各个十进制的ascii码将转换成各个字符。
所以没有问题。