首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java char 陣列直接輸出為字串而非位址:println 多載與 toString 機制

     編輯:程式設計疑難解答

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)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved