I have
char c1 = 'S';           // S as a character
char c2 = '\u0068';      // h in Unicode
char c3 = 0x0065;        // e in hexadecimal
char c4 = 0154;          // l in octal
char c5 = (char) 131170; // b, casted (131170-131072=121)
char c6 = (char) 131193; // y, casted (131193-131072=121)
char c7 = '\'';          // ' apostrophe special character
char c8 = 's';           // s as a character
char[] autoDesignerArray = {c1, c2, c3, c4, c5, c6, c7, c8};
And
System.out.println(autoDesignerArray + "Mustang"); 
Output: [C@c17164Mustang
System.out.println(autoDesignerArray);
Output: Shelby's
I'm not understanding why I get the weird output when I concatenate the char array with a string. What is the "[C@c17164"? The location in memory? And why do I get that when I concatenate with a string, but I get what I would expect when I print it alone?
The expression System.out.println(X + Y) is equal to the expression
System.out.println(X.toString() + Y.toString()).
When you call System.out.println(autoDesignerArray + "Mustang")  autoDesignerArray.toString() (which is "[C@c17164") is concatenated with  "Mustang" and the result is printed.
Since every has array has a class the string you get is the object representation of its object i.e.  [C@c17164Mustang  where
[C is a class name ([ represent 1d array)@ concates the the stringc17164 some hash codeMustang your stringto check the class name of array do System.out.println(yourArray.getClass().getName());
For ex if you do System.out.println(new Object()); you will get something like java.lang.Object@25154f the string representation of object created.
And to print the actual values of array do System.out.println((java.util.Arrays.toString(autoDesignerArray))); which gives 
[S, h, e, l, b, y, ', s]
Demo
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With