Strange toCharArray() behavior

2020-04-10 15:29发布

问题:

I was experimenting with toCharArray() and found some strange behavior.

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

Any theoretical reason behind this?

回答1:

It is because the parameter to println is different in the two calls.

The first parameter is called with char[] and the second is called with a string, where HEX_CHARS is converted with a call to .toString().

The println() have an overriden method that accepts a charArray.



回答2:

The first line calls the method

print(char[] s) 

on the PrintStream which prints what you expect. The second one calls the method

print(String s)

Where is concatenating the string with the toString implementation of the array which is that ugly thing you get ([C@19821f).



回答3:

Arrays are objects, and its toString methods returns

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

In your case [C@19821f means char[] and @19821f is its hashcode in hex notation.

If you want to print values from that array use iteration or Arrays.toString method.

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


回答4:

The strange output is the toString() of the char[] type. for some odd reason, java decided to have a useless default implementation of toString() on array types. try Arrays.toString(HEX_STRING) instead.



标签: java arrays char