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


saya sudah

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

Dan

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

Output: [C @ c17164Mustang

System.out.println(autoDesignerArray);

Output: Shelby

Saya tidak mengerti mengapa saya mendapatkan output aneh ketika saya menggabungkan array char dengan string. Apa itu "[C @ c17164"? Lokasi dalam ingatan? Dan mengapa saya mendapatkan itu ketika saya menggabungkan dengan string, tapi saya mendapatkan apa yang saya harapkan ketika saya mencetaknya sendiri?


5
2018-04-02 14:10


asal


Jawaban:


Ekspresi System.out.println(X + Y) sama dengan ekspresi System.out.println(X.toString() + Y.toString()).

Ketika Anda menelepon System.out.println(autoDesignerArray + "Mustang")  autoDesignerArray.toString() (yang mana "[C@c17164") digabung dengan "Mustang" dan hasilnya dicetak.


7
2018-04-02 14:16



Karena setiap array memiliki kelas, string yang Anda dapatkan adalah representasi objek dari objeknya yaitu [C@c17164Mustang  dimana

  • [C adalah nama kelas ([ mewakili 1d array)
  • @ menyatukan string
  • c17164 beberapa kode hash
  • Mustang string Anda

untuk memeriksa nama kelas dari array lakukan System.out.println(yourArray.getClass().getName());

Untuk mantan jika Anda melakukannya System.out.println(new Object()); Anda akan mendapatkan sesuatu seperti java.lang.Object@25154f representasi string dari objek yang dibuat.

Dan untuk mencetak nilai sebenarnya dari array lakukan System.out.println((java.util.Arrays.toString(autoDesignerArray))); pemberian yang mana

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

Demo


2
2018-04-02 14:25



Array di java tidak ditimpa toString() metode, yang artinya:

  1. System.out.println(autoDesignerArray + "Mustang");
    • akan mencetak default toString() array dan menggabungkannya dengan string
    • implementasi standar toString() akan mencetak nama biner yang diikuti hashCode() (Array char akan mencetak [C diikuti dengan kode hashnya)
  2. System.out.println(autoDesignerArray);
    • akan benar-benar memanggil Arrays.toString () atau fungsi serupa yang menangani toString() dari array dengan benar

0
2018-04-02 14:14



Ini ada hubungannya dengan Array dan mengapa fakta bahwa mereka tidak secara implisit mewarisi Object - Untuk informasi lebih lanjut, silakan periksa ini Pertanyaan SO (punya jawaban di sana).

println(char[] s) apakah agak membingungkan saya dalam Oracle Doc - Dalam C Anda biasanya akan melakukan iterasi melalui setiap elemen di dalam array dan print setiap elemen diikuti oleh \n untuk memutuskan garis.

Namun, inti dari semua itu adalah itu autoDesignerArray.toString() tidak akan benar-benar berfungsi seperti yang Anda harapkan (Itulah mengapa itu kembali [C@c17164).


0
2018-04-02 14:22