Java:带有 char 数组的 println 给出乱码

新手上路,请多包涵

这就是问题所在。这段代码:

 String a = "0000";
 System.out.println(a);
char[] b = a.toCharArray();
 System.out.println(b);

回报

0000
0000

但是这段代码:

 String a = "0000";
 System.out.println("String a: " + a);
char[] b = a.toCharArray();
 System.out.println("char[] b: " + b);

回报

字符串a:0000
字符 [] b: [C@56e5b723

这到底是怎么回事?似乎应该有一个足够简单的解决方案,但我似乎无法弄清楚。

原文由 stephenwade 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 733
2 个回答

当你说

System.out.println(b);

它导致调用 print(char[] s) 然后 println()

print(char[] s) 的 JavaDoc 说:

打印字符数组。字符根据平台默认的字符编码转换为字节,这些字节的写入方式与write(int)方法完全相同。

所以它执行逐字节打印。

当你说

System.out.println("char[] b: " + b);

It results in a call to print(String) , and so what you’re actually doing is appending to a String an Object which toString()Object 这个,与所有 Object 默认情况下,在 Array 的情况下,打印引用的内存地址(打印内存地址) ).

你可以这样做:

 System.out.println("char[] b: " + new String(b));

请注意,从您不注意编码并使用系统默认值的意义上说,这是“错误的”。尽早了解编码。

原文由 Doug Moscrop 发布,翻译遵循 CC BY-SA 3.0 许可协议

System.out.println("char[] b: " + b);

这就像

System.out.println(("char[] b: " + b.toString());

您可以查找“Object.toString()”

原文由 chenyun 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏