Java:println with char array 给出胡言乱语

2022-09-01 14:14:12

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

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


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


答案 1

当你说

System.out.println(b);

它会导致调用 thenprint(char[] s)println()

JavaDoc 说:print(char[] s)

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

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

当你说

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

它会导致对 的调用,因此您实际要做的是附加到 一个 在 上调用的 -- 这(与默认情况下的所有调用一样,在 an 的情况下,将打印引用的值(内存地址)。print(String)StringObjecttoString()ObjectObjectArray

你可以做:

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

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


答案 2

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

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

[ 表示它是一个数组 C 表示在这种情况下的类 char @56e5b723指示内存位置