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

解决方案 »

  1.   

    byte[] b={1,3,6,8,5,0,3,5,7,6,89};
    String str=new String(b);
    System.out.println(str);
    //{1,3,6,8,5,0,3,5,7,6,89};
    这里代表的都是16进制的数字,
    20多之前的对应的都是不显示的一种符号。
    貌似只有89能显示。。
      

  2.   

    byte[] b={1,3,6,8,5,0,3,5,7,6,89};
    我个人觉得,首先你定义的这个数组是字节数组,相当于数值型。
    如果要转成字符串型的话,那可能就会先把byte数据默认转成char型数据,然后再转成字符串。
    以上是我个人理解。
    而由低到高的默认转,其实是把你这里的数值看成为ASCII码,
    就好比字符A对应的ASCII码为65
    具体请看下ASCII码对照。
      

  3.   

    刚看下API明白些,这个字节数组的元素应该是字符型的
      

  4.   

    byte[] b={1,3,6,8,5,0,3,5,7,6,89};
    这不是字符数组!'1'表示字符
      

  5.   

    byte[] b={97,65};
    String str=new String(b);
      

  6.   

    byte[] 是字节数组  char[] 是字符数组
      

  7.   


    char c=5;
    System.out.println(c);
    编译时没有问题,但输出就出问题了呢
      

  8.   

    byte数组存放的是asc码对应的十进制数字。
    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码将转换成各个字符。
    所以没有问题。