这里的问题。 此代码:
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
世界到底是怎么回事? 似乎应该有一个很简单的解决方案,但我似乎无法弄清楚。
当你说
System.out.println(b);
它导致一个呼叫到print(char[] s)
然后println()
适用于Javadoc print(char[] s)
说:
打印字符的阵列。 的字符根据平台的默认字符编码转换成字节,这些字节被写入在写入(int)方法的完全相同的方式。
所以它执行逐字节打印出来。
当你说
System.out.println("char[] b: " + b);
这导致调用print(String)
,所以你实际上做的是追加到一个String
的Object
,其调用toString()
的Object
-这一点,因为所有的Object
默认情况下,在的情况下,一个Array
,打印参考(存储器地址)的值。
你可以这样做:
System.out.println("char[] b: " + new String(b));
请注意,这是在你不支付任何头脑编码和使用系统默认意义上的“错误”。 了解编码宜早不宜迟。
System.out.println("char[] b: " + b);
这就像
System.out.println(("char[] b: " + b.toString());
你可以看一下“Object.toString()”
使用
System.out.println("char[] b: " + Arrays.toString(b));
你得到的gibrish是类名后跟对象的内存地址。 在尝试追加b相的字符串出现问题char[] b:
在这种情况下,字符数组b.toString()方法被调用从而[印刷Ç@ 56e5b723。
[表明它是一个数组C表示在这种情况下焦炭@ 56e5b723类指示的存储器位置
数组的toString()
方法(这是什么,当你做所谓的"..." + b
)只为了给调试输出。 没有特殊情况,其中一个char[]
的toString()
将给你原始的字符串-所有类型的数组具有相同toString()
实现。
如果你想获得从字符数组的原始字符串,使用方法:
String a2 = new String(b);
使用3:电子行!
Scanner input = new Scanner(System.in);
char[] txt = input.next().toCharArray();
System.out.println((char[])txt);