Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java println(charArray + String) vs println(charArray)

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?

like image 611
Mike P Avatar asked Apr 02 '15 14:04

Mike P


2 Answers

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.

like image 169
vahidreza Avatar answered Oct 01 '22 08:10

vahidreza


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 string
  • c17164 some hash code
  • Mustang your string

to 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

like image 22
singhakash Avatar answered Oct 01 '22 06:10

singhakash