在 Java 中打印字符数组
如果我正常打印出一个字符数组
char[] c = new char[]{'3','b','o'};
System.out.println(c); //prints 3bo
输出是一个字符串。但是,如果我连接一个字符串,它会打印数组内存位置。
System.out.println("" + c); //prints [C@659e0bfd
我本来以为它会打印为字符串,我确定为什么会发生这种行为。有什么解释吗?
如果我正常打印出一个字符数组
char[] c = new char[]{'3','b','o'};
System.out.println(c); //prints 3bo
输出是一个字符串。但是,如果我连接一个字符串,它会打印数组内存位置。
System.out.println("" + c); //prints [C@659e0bfd
我本来以为它会打印为字符串,我确定为什么会发生这种行为。有什么解释吗?
解决方案是使用新的字符串(c):
:
System.out.println("" + new String(c));
而且确实是假的,应该删除。"" +
以下是您获得所得到的原因。
System.out
是一个打印流
。 对 println(char[] x)
有一个重载:println()
打印一个字符数组,然后终止该行。此方法的行为就像调用 然后 调用 一样。
print(char[])
println()
"" + c
是字符串串联,在 JLS 15.18.1 字符串串联运算符 +
中定义:
如果只有一个操作数表达式的类型为 ,则在另一个操作数上执行字符串转换 (§5.1.11) 以在运行时生成字符串。
String
[...]转换的执行就像调用引用对象的toString方法一样,没有参数[...]
toString()
没有为数组定义,因此调用 Object.toString()
方法:
类的方法返回一个字符串,该字符串由对象是其实例的类的名称、at 符号字符 '' 和对象哈希代码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:
toString
Object
@
getClass().getName() + '@' + Integer.toHexString(hashCode())
这就是为什么当你做字符串串联时,你会得到类似的东西。[C@659e0bfd
最简单的形式是:
Arrays.toString(c);
如果它是一个 2D 数组,则按如下方式使用 Arrays.deepToString
:
Arrays.deepToString(twoDArray);