奇怪的toCharArray()行为

时间:2012-06-12 01:39:15

标签: java arrays char

我正在尝试toCharArray()并发现了一些奇怪的行为。

假设private static final char[] HEX_CHARS = "0123456789abcdef".toCharArray();

 System.out.println(HEX_CHARS);

  /* prints 0123456789abcdef */

 System.out.println("this is HEX_CHARS "+HEX_CHARS); 
  /* prints [C@19821f */

这背后有任何理论上的原因吗?

4 个答案:

答案 0 :(得分:8)

这是因为println的参数在两次调用中是不同的。

使用char[]调用第一个参数,使用字符串调用第二个参数,其中HEX_CHARS通过调用.toString()进行转换。

println()有一个覆盖charArray的覆盖方法。

答案 1 :(得分:4)

第一行调用方法

print(char[] s) 
PrintStream上的

打印出您期望的内容。第二个调用方法

print(String s)

在哪里将字符串与数组的toString实现连接起来,这是你得到的那个丑陋的东西([C @ 19821f]。

答案 2 :(得分:1)

数组是对象,其toString方法返回

getClass().getName() + "@" + Integer.toHexString(hashCode())

在您的情况下,[C@19821f表示char []和@ 19821f是十六进制表示法的哈希码。

如果要使用迭代或Arrays.toString方法打印该数组中的值。

`System.out.println(Arrays.toString(HEX_CHARS));`

答案 3 :(得分:0)

奇怪的输出是char[]类型的toString()。由于一些奇怪的原因,java决定在数组类型上使用toString()的无用默认实现。请尝试Arrays.toString(HEX_STRING)