問題對比
// 捕獲異常參數
catch (InterruptedException e) { ... }
// 方法參數
put(int 5) // 實際語法: put(int x)
put(Integer 5) // 實際語法: put(Integer x)
基本類型與包裝類型在參數中的差異
| 特性 | 基本類型 (int) | 包裝類型 (Integer) |
| 默認值 | 0 | null |
| 可為 null | 否 | 是 |
| 語義 | 「必須有值」 | 「值可選/未知」 |
| 傳遞方式 | 值傳遞 (複製) | 引用傳遞 (複製引用) |
| 性能 | 略快 (無對象開銷) | 略慢 (對象頭、GC) |
實戰建議:實體類/DTO 統一用包裝類
// 推薦:實體類字段全用包裝類
class UserDTO {
private Integer id; // 數據庫可能為 NULL
private String username;
private Integer age; // 0 歲 vs 未填寫
private Double balance; // NULL vs 0.00
private Boolean active; // NULL vs false
}
理由:數據庫字段普遍允許 NULL,基本類型無法區分「NULL」與「默認值」。
Controller/Service 參數選擇
- 單一必填參數:基本類型
void updateAge(int userId, int age)
- 可選參數/複雜對象:包裝類或 DTO
void updateProfile(Integer userId, UserProfileDTO dto)
- Web 參數綁定:Spring MVC 自動轉換
String → Integer,缺失參數綁定為 null (包裝類) 而非報錯 (基本類型)
代碼中常見誤區澄清
| 誤區代碼 | 問題 | 正確理解 |
put(Integer 5) | 語法錯誤:類型名不能作參數名 | 參數聲明:void put(Integer value) |
catch (e) | 語法錯誤:catch 必須指定類型 | catch (Exception e) |
put(5) 調用 | 正確:5 自動裝箱為 Integer | 調用時無需關心裝箱 |
總結
- 實體類/DTO:全部包裝類,對應數據庫 NULL 語義
- 簡單必填參數:基本類型,性能略優、語義明確
- 可選/可空參數:包裝類,利用
null 表達「無值」
- Web 層綁定:優先包裝類,避免缺失參數報錯
- 實際開發中:頁面傳
String,後端轉換,不必過度糾結
- 上一篇文章: Java 包裝類存在的意義:基本類型與物件系統的橋樑
- 下一篇文章: XAMPP phpMyAdmin #2002 錯誤:端口修改後配置文件同步解決
Copyright ©
程式碼之家 All Rights Reserved