如果我正常打印出一个字符数组
char[] c = new char[]{'3','b','o'};
System.out.println(c); //prints 3bo
输出是一个字符串。但是,如果我连接一个字符串,它会打印数组内存位置。
System.out.println("" + c); //prints [C@659e0bfd
我本来希望它打印为一个字符串,我确定为什么会发生这种行为。有什么解释吗?
原文由 Toby L. 发布,翻译遵循 CC BY-SA 4.0 许可协议
解决方案是使用
new String(c)
:而
"" +
确实是假的,应该删除。下面是为什么你得到你得到的。
System.out
是一个PrintStream
。println()
有超载println(char[] x)
:"" + c
是 _字符串连接_,在 JLS 15.18.1 String Concatenation Operator中定义+
:JLS 5.1.11 字符串转换 说:
toString()
没有为数组定义,所以调用了Object.toString()
方法:这就是为什么在进行字符串连接时会得到类似
[C@659e0bfd
的原因。