初學 Java 時閱讀 JDK 文檔:File[] listFiles() 回傳「抽象路徑名陣列」。疑惑:int[] a = new int[n] 需要 new 分配空間,為何 File[] files = dir.listFiles() 直接得到陣列卻未見 new?
new 操作已封裝在方法內部。JDK 原始碼簡化版:
public File[] listFiles() {
// 內部邏輯掃描目錄,統計檔案數量 n
File[] files = new File[n]; // 這裡做了 new
// 逐個建立 File 物件填入陣列
return files; // 直接回傳已建立好的陣列
}
class A {}
A getA() { return new A(); } // new 在方法裡
// 呼叫端
A a = new A(); // 顯式 new
A a2 = getA(); // 隱式 new,結果相同
File[] 是參考型別,方法回傳的是指向堆上陣列物件的參考。String.split()、Files.readAllLines() 等同理,皆在內部完成 new。new Type[size]。理解「誰負責 new」是掌握 Java 記憶體模型與 API 設計的基礎。