3

我正在尝试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

4 回答 4

8

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

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

println()有一个接受 charArray 的重写方法。

于 2012-06-12T01:43:49.697 回答
4

第一行调用方法

print(char[] s) 

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

print(String s)

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

于 2012-06-12T01:44:58.067 回答
1

数组是对象,它的 toString 方法返回

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

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

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

`System.out.println(Arrays.toString(HEX_CHARS));`
于 2012-06-12T01:44:28.853 回答
0

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

于 2012-06-12T01:41:55.923 回答