Solution is to use new String(c)
:
System.out.println("" + new String(c));
And the "" +
is really bogus and should be removed.
Below is why you get what you get.
System.out
is a PrintStream
. println()
has an overload for println(char[] x)
:
Prints an array of characters and then terminate the line. This method behaves as though it invokes
print(char[])
and thenprintln()
.
"" + c
is string concatenation, which is defined in JLS 15.18.1 String Concatenation Operator +
:
If only one operand expression is of type
String
, then string conversion (§5.1.11) is performed on the other operand to produce a string at run time.
And JLS 5.1.11 String Conversion says:
[…] the conversion is performed as if by an invocation of the toString method of the referenced object with no arguments […]
toString()
is not defined for arrays, so the Object.toString()
method is invoked:
The toString
method for class Object
returns a string consisting of the name of the class of which the object is an instance, the at-sign character ‘@
‘, and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Which is why you get something like [[email protected]
when you do string concatenation.