A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 叶征东 中级黑马   /  2012-8-5 15:51  /  2530 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

讲到将字节数组转成字符串时,毕老师讲了两个方法:String(byte[])和String(byte[],offset,count),但是没有讲实例。
下面是我写的代码:
class Demo
{
      public static void main(String[] args)
      {
             byte[] b={23,45,56,24,43,87,12,64};
             String s1=new String(b);
             String s2=new String(b,2,4);
             System.out.println(s1);
             System.out.println(s2);
             System.out.println("Holle world");
     }
}
编译能通过,但输出的结果是 请问这是怎么回事,能给我写个实例么,谢谢。

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

7 个回复

倒序浏览
byte[] b={23,45,56,24,43,87,12,64};
定义的是一个byte数组,转换的时候是查的ASC码表,找到值对应的字符,然后打印值,就是那些乱码。
回复 使用道具 举报
一楼正解
其实这个转换方法有他的局限性
因为字符类型占两个字节
而byte却是一个字节
也就是说不是所有的字符都能用byte来表示
所有的byte类型的数据却都可以转成相应的字符串。。。
回复 使用道具 举报
侯宪博 发表于 2012-8-5 16:16
一楼正解
其实这个转换方法有他的局限性
因为字符类型占两个字节

谢谢,能写个实例么。
回复 使用道具 举报
叶征东 发表于 2012-8-5 17:37
谢谢,能写个实例么。

其实你自己写的就是个实例啊。。。
其实你打印出来的不是乱码,是按照ascII码表打印出来的
你的数组中出现了W,其实W对应的十进制ascII码值就是87
你看你数组中是不是有87
你要是想打印出字母字符串简单
那你就用着几个数
A-Z(ascII码对应十进制65--90)
a-z(ascII码对应十进制97--122)
你在我给你说的数中间随便挑
打印出来全是英文字母字符
希望对你能有所帮助。。。
回复 使用道具 举报
我给你举个列子吧~~

public class Test
{
      public static void main(String[] args)
      {
             byte[] b={'a','b','c','d','e'};
             String s=new String(b);
             String s1=new String(b,1,3);
            
             System.out.println(s);
             System.out.println(s1);
             System.out.println("Holle world");
     }
}




abcde
bcd
Holle world
回复 使用道具 举报
侯宪博 发表于 2012-8-5 19:01
其实你自己写的就是个实例啊。。。
其实你打印出来的不是乱码,是按照ascII码表打印出来的
你的数组中出 ...

谢谢了。
回复 使用道具 举报
问题已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马