我正在尝试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 */
这背后有任何理论上的原因吗?
答案 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)
。