Java的:用字符数组调用println给胡言乱语(Java: println with char

2019-07-04 01:21发布

这里的问题。 此代码:

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


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

Answer 1:

当你说

System.out.println(b);

它导致一个呼叫到print(char[] s)然后println()

适用于Javadoc print(char[] s)说:

打印字符的阵列。 的字符根据平台的默认字符编码转换成字节,这些字节被写入在写入(int)方法的完全相同的方式。

所以它执行逐字节打印出来。

当你说

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

这导致调用print(String) ,所以你实际上做的是追加到一个StringObject ,其调用toString()Object -这一点,因为所有的Object默认情况下,在的情况下,一个Array ,打印参考(存储器地址)的值。

你可以这样做:

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

请注意,这是在你不支付任何头脑编码和使用系统默认意义上的“错误”。 了解编码宜早不宜迟。



Answer 2:

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

这就像

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

你可以看一下“Object.toString()”



Answer 3:

使用

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

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

[表明它是一个数组C表示在这种情况下焦炭@ 56e5b723类指示的存储器位置



Answer 4:

数组的toString()方法(这是什么,当你做所谓的"..." + b )只为了给调试输出。 没有特殊情况,其中一个char[]toString()将给你原始的字符串-所有类型的数组具有相同toString()实现。

如果你想获得从字符数组的原始字符串,使用方法:

String a2 = new String(b);


Answer 5:

使用3:电子行!

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


文章来源: Java: println with char array gives gibberish