首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 操作符全解析:從 `+` `.` `*` 看變量背後的內存語義

     編輯:程式設計疑難解答

提問背景

初學者困惑:`變量 + 變量 = 變量`,那麼 `變量.變量` 和 `變量 * 變量` 是什麼?

三大操作符本質對比

操作符語法形式語義本質操作數要求結果類型
+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 類型系統就清晰了。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved