首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 變量命名規範與引用變量賦值陷阱:基本類型 vs 引用類型的本質區別

     編輯:Java 綜合教學

Java 變量命名規範與引用變量賦值陷阱:基本類型 vs 引用類型的本質區別

一、Java 變量命名規則(硬性約束)

  • 首字符:字母(A-Z, a-z)、下劃線(_)、美元符號($) —— 不能是數字。
  • 後續字符:字母、數字、下劃線、美元符號。
  • 不能使用關鍵字:public, class, int, if, else, while, try, catch, null, true, false 等 50+ 保留字。
  • 區分大小寫:myVar ≠ myvar。

二、命名規範(軟性約束,阿里巴巴開發手冊標準)

三、核心陷阱:引用變量賦值傳遞的是「地址」而非「值」

基本類型:值傳遞,互不影響

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     │
└─────────┘              └──────────────┘

四、實戰避坑指南

  1. 防禦性拷貝:需要獨立副本時,手動 new 新對象並複製屬性,或實現 Cloneable、使用拷貝構造函數、工具類(如 BeanUtils.copyProperties)。
  2. 不可變對象:儘量使用 final 修飾屬性、無 setter、構造函數注入,從源頭杜絕共享可變狀態。
  3. 集合傳遞:方法參數傳入 List、Map 時,內部修改會影響外部。需傳入 new ArrayList<>(list) 或返回不可變視圖 Collections.unmodifiableList(list)。
  4. == vs equals:== 比較引用地址,equals() 比較內容(需重寫)。

五、總結

命名規範是代碼可讀性的基石;理解「引用傳遞地址」是避免 Java 並發、集合、對象共享類 Bug 的核心前提。基本類型傳值,引用類型傳地址 —— 牢記這一句,少踩無數坑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型規範正例反例
類/接口UpperCamelCaseUserService, OrderDTOuser_service, orderDto
方法/變量lowerCamelCasegetUserName, orderCountGetUserName, order_count
常量UPPER_SNAKE_CASEMAX_RETRY_COUNTMaxRetryCount
包名全小寫,多級用點分隔com.company.modulecom.Company.Module
布爾變量建議 is/has/can 開頭isEnabled, hasPermissionflag, status