黑马程序员技术交流社区
标题:
为啥是这个结果?谁给解释下
[打印本页]
作者:
王虎
时间:
2012-10-12 09:56
标题:
为啥是这个结果?谁给解释下
本帖最后由 王虎 于 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的正常值怎么做?
}
作者:
qhasilver
时间:
2012-10-12 10:39
char[] ch ={'a', 'b' ,'c'};
System.out.println(ch);
byte[] b = {'a','b','c'};
System.out.println(b[1]);
复制代码
作者:
王红潮
时间:
2012-10-12 10:51
本帖最后由 王红潮 于 2012-10-12 11:12 编辑
System.out它返回的是一个PrintStream打印输出流,里面的内置了打印字符数组的方法println(char[] s),而没有打印byte数组的方法,byte数组是一个对象,所以打印它的哈希值!
byte数组里的元素不需要加单引号,可以用for循环打印:
for (byte by : b){
System.out.println(by);
}
作者:
徐梦侠
时间:
2012-10-12 11:14
在print源代码中,可以看到一些解释。打印字符数组。会按照平台的默认字符编码将字符转换为字节,并完全以
write(int)
方法的方式写入这些字节,相当于直接拼出来打印。
如果打印包括
byte的
整数类型的数组,按照平台的默认字符串编码将
String.valueOf(Object
)
方法生成的字符串转换为字节,相当于返回的是地址再以
write(int)
方法的方式写入这些字节,所以打印的是地址。
如果想要打印b的正常值,可以单独用循环。
for(byte b1: b){
System.out.print((char)b1);
}
作者:
杨华东
时间:
2012-10-12 11:18
路过同意楼上
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2