char[] c = {'a','b','c'}; System.out.println(c); 輸出 abc 而非記憶體位址,原因在於 PrintStream.println 有針對 char[] 的多載:
// PrintStream.java
public void println(char x[]) {
synchronized (this) {
print(x);
newLine();
}
}
public void print(char s[]) {
if (s == null) { print("null"); return; }
write(s); // 直接寫入字元陣列內容
}
int[] arr = {1,2,3}; System.out.println(arr); → 輸出 [I@15db9742 (預設 Object.toString()),無 int[] 多載。String s = "abc"; System.out.println(s); → 調用 String.toString() 回傳自身。Object obj = new Object(); System.out.println(obj); → 調用 Object.toString() 產生類名+哈希碼。Java 認為char[]是字串的底層表示,直接列印內容符合直覺;其他陣列類型則視為一般物件,需自行轉換 (如Arrays.toString(arr))。
若需列印其他陣列內容,請用 System.out.println(Arrays.toString(arr)) 或 Java 8+ Arrays.stream(arr).forEach(System.out::print)。