这是问题所在。这段代码:
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
世界上到底发生了什么?似乎应该有一个简单的解决方案,但我似乎无法弄明白。
答案 0 :(得分:28)
当你说
时System.out.println(b);
调用print(char[] s)
然后调用println()
print(char[] s)
的JavaDoc说:
打印一个字符数组。字符将转换为字节 根据平台的默认字符编码,以及这些 字节的写入方式与write(int)方法完全相同。
因此它执行逐字节打印输出。
当你说
时System.out.println("char[] b: " + b);
这会导致对print(String)
的调用,因此您实际执行的操作是附加String
和Object
,toString()
会调用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);