ste*_*ade 26 java arrays char output
这是问题所在.这段代码:
String a = "0000";
System.out.println(a);
char[] b = a.toCharArray();
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)
回报
0000 0000
但是这段代码:
String a = "0000";
System.out.println("String a: " + a);
char[] b = a.toCharArray();
System.out.println("char[] b: " + b);
Run Code Online (Sandbox Code Playgroud)
回报
String a: 0000 char[] b: [C@56e5b723
世界上到底发生了什么?似乎应该有一个简单的解决方案,但我似乎无法弄明白.
Dou*_*rop 29
当你说
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)
它会导致打电话给print(char[] s)那时println()
JavaDoc print(char[] s)表示:
打印一个字符数组.根据平台的默认字符编码将字符转换为字节,这些字节的写入方式与write(int)方法完全相同.
因此它执行逐字节打印输出.
当你说
System.out.println("char[] b: " + b);
Run Code Online (Sandbox Code Playgroud)
这导致了一个呼叫print(String),所以你实际上做的是附加到String一个Object它调用toString()的Object-这一点,因为所有的Object默认,而在一个的情况下Array,打印的参考值(内存地址).
你可以这样做:
System.out.println("char[] b: " + new String(b));
Run Code Online (Sandbox Code Playgroud)
请注意,这是"错误的",因为您没有考虑编码并使用系统默认值.尽快了解编码.
用
System.out.println("char[] b: " + Arrays.toString(b));
Run Code Online (Sandbox Code Playgroud)
你得到的乱码是类名后跟对象的内存地址。尝试在 b 后附加字符串时出现问题char[] b:在这种情况下,因此调用 char 数组 b.toString() 方法,因此 [C@56e5b723 被打印。
[ 表示是数组 C 表示本例中的类 char @56e5b723 表示内存位置
小智 5
System.out.println("char[] b: " + b);
Run Code Online (Sandbox Code Playgroud)
这就像
System.out.println(("char[] b: " + b.toString());
Run Code Online (Sandbox Code Playgroud)
你可以查找"Object.toString()"
| 归档时间: |
|
| 查看次数: |
39884 次 |
| 最近记录: |