奇怪的 toCharArray() 行为

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 */

有理论依据吗?

如果你想打印 char[],请使用 java.util.Arrays 中的 Arrays.toString() - nhahtdh
4个回答

8

这是因为两个调用中传递给println的参数不同。

第一个参数使用char[],第二个参数使用字符串,并且使用.toString()进行了HEX_CHARS的转换。

println()有一个重载方法可以接受一个charArray参数。


4
第一行调用了该方法。
print(char[] s) 

在打印您期望的PrintStream上,第一个调用方法。第二个调用方法。
print(String s)

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


1

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

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

在您的情况下,[C@19821f 表示 char[],而 @19821f 则是其十六进制哈希码。
如果您想要打印该数组中的值,请使用迭代或 Arrays.toString 方法。
`System.out.println(Arrays.toString(HEX_CHARS));`

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接