| 類型 | 規範 | 正例 | 反例 |
| 類/接口 | UpperCamelCase | UserService, OrderDTO | user_service, orderDto |
| 方法/變量 | lowerCamelCase | getUserName, orderCount | GetUserName, order_count |
| 常量 | UPPER_SNAKE_CASE | MAX_RETRY_COUNT | MaxRetryCount |
| 包名 | 全小寫,多級用點分隔 | com.company.module | com.Company.Module |
| 布爾變量 | 建議 is/has/can 開頭 | isEnabled, hasPermission | flag, status |
三、核心陷阱:引用變量賦值傳遞的是「地址」而非「值」
基本類型:值傳遞,互不影響
int i1 = 10;
int i2 = i1; // 複製值
i1 = 10000;
System.out.println(i1); // 10000
System.out.println(i2); // 10 ← 未改變
引用類型:傳遞引用(地址),指向同一對象
Test t = new Test();
Dog d1 = t.new Dog(1); // 年齡 = 1
Dog d2 = d1; // d2 指向 d1 同一個對象
d1.age = 10; // 修改對象內部屬性
System.out.println(d1.age); // 10
System.out.println(d2.age); // 10 ← 也變了!
記憶模型:
- 基本類型變量存儲 值本身。
- 引用類型變量存儲 指向堆內存對象的引用(地址)。
d2 = d1 只是把「地址」複製給 d2,堆上只有一個 Dog 對象。
- 所有引用變量大小相同(32位 JVM 4 字節,64位 JVM 8 字節,開啟壓縮指針除外)。
圖解內存結構
棧內存 堆內存
┌─────────┐ ┌──────────────┐
│ d1 ─────┼────────────► │ Dog 对象 │
│ d2 ─────┼────────────► │ age = 10 │
└─────────┘ └──────────────┘
四、實戰避坑指南
- 防禦性拷貝:需要獨立副本時,手動 new 新對象並複製屬性,或實現
Cloneable、使用拷貝構造函數、工具類(如 BeanUtils.copyProperties)。
- 不可變對象:儘量使用
final 修飾屬性、無 setter、構造函數注入,從源頭杜絕共享可變狀態。
- 集合傳遞:方法參數傳入
List、Map 時,內部修改會影響外部。需傳入 new ArrayList<>(list) 或返回不可變視圖 Collections.unmodifiableList(list)。
- == vs equals:
== 比較引用地址,equals() 比較內容(需重寫)。
五、總結
命名規範是代碼可讀性的基石;理解「引用傳遞地址」是避免 Java 並發、集合、對象共享類 Bug 的核心前提。基本類型傳值,引用類型傳地址 —— 牢記這一句,少踩無數坑。
- 上一篇文章: Spring MVC 文件上傳下載完整實戰:五種上傳方式、多文件上傳、流式下載與安全實踐
- 下一篇文章: Java 應用啟動腳本 start.sh 參數詳解與運行指南
Copyright ©
程式碼之家 All Rights Reserved