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

时间:2012-11-22 02:55:29

标签: java arrays char output

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

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);

返回

String a: 0000
char[] b: [C@56e5b723


世界上到底发生了什么?似乎应该有一个简单的解决方案,但我似乎无法弄明白。

5 个答案:

答案 0 :(得分:28)

当你说

System.out.println(b);

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

print(char[] s)的JavaDoc说:

  

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

因此它执行逐字节打印输出。

当你说

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

这会导致对print(String)的调用,因此您实际执行的操作是附加StringObjecttoString()会调用Object Object这与默认情况下的所有Array一样,如果是System.out.println("char[] b: " + new String(b)); ,则打印引用的值(内存地址)。

你可以这样做:

{{1}}

请注意,这是“错误的”,因为您没有考虑编码并使用系统默认值。尽快了解编码。

答案 1 :(得分:5)

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

这就像

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

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

答案 2 :(得分:4)

使用

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

你得到的gibrish是Class名称,后跟对象的内存地址。当您尝试使用字符串char[] b:附加b时出现问题,在这种情况下调用char数组b.toString()方法[C @ 56e5b723打印。

[表示它是一个数组 C表示本例中的类char @ 56e5b723表示内存位置

答案 3 :(得分:4)

数组的toString()方法(执行"..." + b时调用的方法)仅用于提供调试输出。没有特殊情况,char[]的{​​{1}}将为您提供原始字符串 - 所有类型的数组都具有相同的toString()实现。

如果要从char数组中获取原始字符串,请使用:

toString()

答案 4 :(得分:1)

使用 3:排!

Scanner input = new Scanner(System.in);
char[] txt = input.next().toCharArray();
System.out.println((char[])txt);