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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王虎 中级黑马   /  2012-10-12 09:56  /  1221 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王虎 于 2012-10-12 10:00 编辑

        public static void main(String[] args) {
                char[] ch ={'a', 'b' ,'c'};
                System.out.println(ch);
                byte[] b = {'a','b','c'};
                System.out.println(b);
                            打印结果:abc
                                         [B@de6ced
                             为啥打印ch出来的就是值而打印b出来的就是一堆hash混合码?想要打印出b的正常值怎么做?

        }

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
  1.                 char[] ch ={'a', 'b' ,'c'};
  2.                 System.out.println(ch);
  3.                 byte[] b = {'a','b','c'};
  4.                 System.out.println(b[1]);
复制代码
回复 使用道具 举报
本帖最后由 王红潮 于 2012-10-12 11:12 编辑

System.out它返回的是一个PrintStream打印输出流,里面的内置了打印字符数组的方法println(char[] s),而没有打印byte数组的方法,byte数组是一个对象,所以打印它的哈希值!
byte数组里的元素不需要加单引号,可以用for循环打印:
for (byte by : b){
   System.out.println(by);
  }
回复 使用道具 举报
在print源代码中,可以看到一些解释。打印字符数组。会按照平台的默认字符编码将字符转换为字节,并完全以 write(int) 方法的方式写入这些字节,相当于直接拼出来打印。
如果打印包括byte的整数类型的数组,按照平台的默认字符串编码将 String.valueOf(Object) 方法生成的字符串转换为字节,相当于返回的是地址再以 write(int) 方法的方式写入这些字节,所以打印的是地址。
如果想要打印b的正常值,可以单独用循环。
for(byte b1: b){
       System.out.print((char)b1);
}
回复 使用道具 举报
路过同意楼上
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马