Java 支援四種基本類型:介面、類別、陣列、基本型別。前三者統稱參考型別,類別實例與陣列是物件,基本型別值不是物件。類別成員包含欄位、方法、成員類別、成員介面。方法特徵包含名稱與參數型別,**不包含回傳型別**。
類別提供 public static Type getInstance() 回傳實例,而非 new Type()。
Boolean.valueOf(String) 比 new Boolean(String) 更清晰表達意圖。Collections.emptyList() 回傳 List 介面,實際類別隱藏。支援介面導向框架。public 或 protected 建構子 → 無法繼承 (鼓勵組合大於繼承)。valueOf, getInstance, newInstance 等命名)。// 反面教材:每次新建 String 實例
String s = new String("sample"); // Don't do this!
"sample" 本身已是字面常量池中的 String 物件,再 new 多此一舉。
String s = "sample";static final 常數或快取。StringBuilder) 若無共享需求,局部建立無妨。String 為不可變字串,任何「修改」操作 (substring, replace, concat) 皆產生新物件。原引用指向的物件不變,這就是為何傳入方法修改後外部值不變的原因。頻繁拼接請用 StringBuilder。
現代 JVM (HotSpot) 對小物件分配/回收極度優化 (TLAB、逃逸分析、標量替換)。為了程式碼清晰、正確、功能強大而建立額外物件,通常是好事,勿過早優化。
new。