初學者困惑:`變量 + 變量 = 變量`,那麼 `變量.變量` 和 `變量 * 變量` 是什麼?
| 操作符 | 語法形式 | 語義本質 | 操作數要求 | 結果類型 |
|---|---|---|---|---|
+ | a + b | 數值相加 或 字符串拼接 | 數值類型 / 任意類型(字符串上下文) | 數值 / String |
. | obj.field / obj.method() | 成員訪問:訪問對象的屬性或調用方法 | 左操作數必須是引用類型(對象/數組/接口) | 屬性類型 / 方法返回類型 |
* | a * b | 數值相乘 | 數值類型(byte/short/int/long/float/double) | 數值類型(按提升規則) |
class User {
String name; // 實例字段
String getName() { ... } // 實例方法
}
User user = new User(); // user 是引用變量,指向堆上對象
String n = user.name; // 1. 解引用 user → 定位對象 2. 讀取 name 字段偏移量 3. 返回引用
String m = user.getName();// 1. 解引用 2. 查找方法表 3. 執行方法 4. 返回結果
核心點:`.` 不是數學運算,而是**導航操作** —— 沿著引用找到對象,進入對象內部結構提取數據或行為。
存在,但僅限數值類型。
int a = 3, b = 4;
int c = a * b; // 12,整數乘法
double x = 2.5, y = 4.0;
double z = x * y; // 10.0,浮點乘法
// 錯誤示例
String s = "a" * "b"; // 編譯錯誤:String 不支持 * 操作符
Object o = new Object() * new Object(); // 編譯錯誤
Java 不支持操作符重載,`*` 只能用於數值運算(或通過庫實現矩陣/大數乘法,但本質是方法調用 `multiply()`)。
+:加法/拼接 → **值運算**.:點選/導航 → **結構訪問***:乘法/縮放 → **值運算**變量是標籤,`.` 是打開標籤對應的盒子拿東西;`+` 和 `*` 是把盒子裡的數字拿出來算術。區分「引用導航」與「值計算」,Java 類型系統就清晰了。