變量是程序操作數據的「標籤」。本文面向零基礎學習者,通過圖解記憶體、對比基本/引用類型、實戰常見錯誤,建立正確的變量心智模型。
變量 = 類型 + 名稱 + 值。本質上是內存地址的別名,方便人類閱讀與操作數據。
int age = 18; // 基本類型:直接存儲值
String name = "Tom"; // 引用類型:存儲對象在堆中的地址
| 類別 | 關鍵字 | 位數 | 默認值 | 取值範圍/說明 |
|---|---|---|---|---|
| 整數 | byte | 8 | 0 | -128 ~ 127 |
| short | 16 | 0 | -32,768 ~ 32,767 | |
| int | 32 | 0 | -2^31 ~ 2^31-1(約 ±21 億) | |
| long | 64 | 0L | -2^63 ~ 2^63-1,末尾加 L | |
| 浮點 | float | 32 | 0.0f | 單精度,末尾加 F,約 7 位有效數字 |
| double | 64 | 0.0 | 雙精度,默認浮點類型,約 15 位有效數字 | |
| 字符 | char | 16 | '\u0000' | 單個 Unicode 字符,單引號 |
| 布爾 | boolean | 1~8 | false | true/false,無具體大小規定 |
口訣:整數默認 int,浮點默認 double,long 加 L,float 加 F,char 單引號,boolean 真假。
null(指向「無對象」)。int[] scores = new int[5]; // 數組對象在堆,scores 在棧存地址
scores[0] = 95; // 通過地址找到對象修改內容
// 1. 分步
int a;
a = 10;
// 2. 一步到位
int b = 20;
// 3. 同類型多變量
int x = 1, y = 2, z = 3;
// 4. 引用類型
String s; // s = null
String t = "Hi"; // 指向字符串常量池對象
// 基本類型:值直接在棧
int a = 10;
int b = a; // 複製值
b = 20; // a 仍為 10
// 引用類型:棧存地址,堆存對象
int[] arr1 = {1,2,3};
int[] arr2 = arr1; // 複製地址,指向同一對象
arr2[0] = 99; // arr1[0] 也變成 99
核心結論:基本類型傳值,引用類型傳地址(稱「傳引用的值」)。方法參數傳遞同理。
| 錯誤代碼 | 問題 | 修正 |
|---|---|---|
int 1name = 1; | 數字開頭 | int name1 = 1; |
float f = 3.14; | 默認 double | float f = 3.14f; |
char c = "A"; | 雙引號是字符串 | char c = 'A'; |
boolean flag = "true"; | 字符串非布爾 | boolean flag = true; |
String s; System.out.println(s.length()); | 未初始化為 null | String s = ""; 或判空 |
int[] a = new int[3]; a[3] = 1; | 索引越界 | 合法索引 0~2 |
userName、maxCount、isValid。a、temp、data 等無語義名(循環計數器 i/j/k 除外)。MAX_SIZE、DEFAULT_TIMEOUT_MS。float price = 19.9; 編譯報錯?如何修正?arr1[0] 為何變化?int[] arr1={1}; int[] arr2=arr1; arr2[0]=2;掌握變量聲明、初始化、基本/引用類型區別與記憶體模型,是通往 Java 進階的必經之路。下一篇將講解「運算符與表達式」。