2015-04-02 17 views
5

Ich habeJava println (charArray + String) vs println (charArray)

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}; 

Und

System.out.println(autoDesignerArray + "Mustang"); 

Ausgang: [C @ c17164Mustang

System.out.println(autoDesignerArray); 

Ausgang: Shelby

Ich verstehe nicht, warum ich das komische o bekomme Ausgabe, wenn ich das Char-Array mit einer Zeichenfolge verketten. Was ist "[C @ c17164]? Der Speicherort im Speicher? Und warum bekomme ich das, wenn ich mit einer Schnur verkette, aber ich bekomme, was ich erwarten würde, wenn ich es alleine drucke?

+0

'System.out.println (autoDesignerArray + "Mustang") gibt,' und 'System.out. println (autoDesignerArray); 'sind nicht die gleiche Methode. 'System.out.println' liefert eine Überladung, die' char' Array behandelt – ortis

Antwort

7

Der Ausdruck Handhabung System.out.println(X + Y) System.out.println(X.toString() + Y.toString()) dem Ausdruck gleich ist.

Wenn Sie anrufen System.out.println(autoDesignerArray + "Mustang")autoDesignerArray.toString() (die "[[email protected]" ist) verkettet mit "Mustang" und das Ergebnis gedruckt wird.

+0

Ah, das macht Sinn. –

+0

Entsprechend Ihrem 2. Punkt Wenn Sie System.out.println (autoDesignerArray) aufrufen, sollte autoDesignerArray.toString() (das ist "[C @ c17164") gedruckt werden, aber es druckt Shelby's. Ohne String Verkettung mit Array druckt tatsächliche Daten, aber wenn wir Array mit String verketten, dann druckt es Hashcode-Adresse. – Vikas

+0

@VikasKumarSingh "* Nach Ihrem 2. Punkt Wenn Sie System.out.println (autoDesignerArray) aufrufen autoDesignerArray.toString() (was" [C @ c17164 ") sollte gedruckt werden *" nicht ganz, "autoDesignerArray.toString() 'return string' "[C @ c17164" ', aber' println (autoDesignerArray) 'beinhaltet nicht' toString() ', es druckt einfach jedes Zeichen aus dem Array. Dies ist möglich, weil in 'PrintStream' (welches' System.out' eine Instanz von ist) nur wenige überladene 'println' Methoden existieren, und eine davon ist' println (char []) '. – Pshemo

0

Arrays in Java nicht toString() Methode, überschrieben, was bedeutet, dass:

  1. System.out.println(autoDesignerArray + "Mustang");
    • Standard toString() des Arrays gedruckt wird und es mit der
    • der Standardimplementierung String verketten toString() wird den binären Namen gefolgt von hashCode() (char-Array wird gedruckt [C gefolgt von seinem Hash-Code)
  2. System.out.println(autoDesignerArray);
    • wird Arrays.toString tatsächlich() aufrufen, oder eine ähnliche Funktionalität der toString() von Arrays korrekt
+1

Ich bin mir ziemlich sicher, dass der 2. Punkt auf [this] zurückzuführen ist (https://docs.oracle.com/javase/8/docs/api /java/io/PrintStream.html#println-char:A-). Auch über den ersten bin ich mir nicht sicher. – npinti

0

Das hat mit Arrays zu tun und warum die Tatsache, dass sie nicht implizit erben Object - Für weitere Informationen fühlen Sie sich frei, diese SO question (haben Sie eine Antwort dort).

println(char[] s) etwas nicht verwirren mich im Oracle Doc - In C würde Sie in der Regel innerhalb des Arrays jedes Element durchlaufen und print jedes Element durch eine \n folgen der Linie zu brechen.

Allerdings ist die Jist von allem, dass autoDesignerArray.toString() wird nicht wirklich funktionieren, wie Sie es wünschen (weshalb es [[email protected] zurückgibt).

2

Da jeder Array eine Klasse hat, ist die Zeichenfolge, die Sie erhalten, die Objektdarstellung ihres Objekts, d.h.[[email protected] wo

  • [C ein Klassenname ist ([ 1D-Array repräsentieren)
  • @ concates die die Zeichenfolge
  • c17164 einige Hashcode
  • Mustang Zeichenfolge

die Klasse zu prüfen, Name des Arrays do System.out.println(yourArray.getClass().getName());

Zum Beispiel, wenn Sie System.out.println(new Object()); tun, erhalten Sie etwas wie [email protected] die String-Darstellung des Objekts erstellt.

und die tatsächlichen Werte der Array tun System.out.println((java.util.Arrays.toString(autoDesignerArray))); zu drucken, die

[S, h, e, l, b, y, ', s]

Demo

+0

Danke für die Erklärung des anderen Teils der Frage. –

+0

@MikeP mein Vergnügen – silentprogrammer

Verwandte Themen