目錄
一、算術運算符
1. 基本算術運算符(二元)
2. 自增 / 自減運算符(一元)
二、類型轉換(隱式與強制)
1. 隱式轉換(自動類型轉換)
?編輯
2. 強制轉換(顯式類型轉換)
三、字符串和字符的 “+” 操作
四、賦值運算符
1. 基本賦值運算符(=)
2. 復合賦值運算符
五、關系運算符
六、邏輯運算符
1. 基本邏輯運算符(非短路)
2. 短路邏輯運算符
七、三元運算符
八、運算符優先級
九、總結
運算符是 Java 中用于執行運算的特殊符號,是程序邏輯實現的基礎。根據功能不同,Java 運算符可分為算術運算符、賦值運算符、關系運算符、邏輯運算符、三元運算符等,且各類運算符存在明確的優先級規則。本文將系統總結各類運算符的特性、使用場景及注意事項。
一、算術運算符
算術運算符用于執行基本的數學運算,包括二元運算符(需兩個操作數)和一元運算符(需一個操作數)。
1. 基本算術運算符(二元)
運算符 | 功能 | 示例 | 說明 |
---|---|---|---|
+ | 加法 | 3 + 5 = 8 | 數字相加或字符串 / 字符拼接(見后文) |
- | 減法 | 10 - 4 = 6 | 數字相減 |
* | 乘法 | 2 * 6 = 12 | 數字相乘 |
/ | 除法 | 7 / 2 = 3 | 整數除法取商(非四舍五入);浮點數除法正常計算(7.0 / 2 = 3.5 ) |
% | 取模(余) | 7 % 2 = 1 | 結果符號與被除數一致(-7 % 2 = -1 ,7 % -2 = 1 ) |
2. 自增 / 自減運算符(一元)
用于操作數自身加 1 或減 1,分為前綴(先運算后使用)和后綴(先使用后運算)兩種形式。
運算符 | 功能 | 前綴示例(++a) | 后綴示例(a++) |
---|---|---|---|
++ | 自增(+1) | int a=3; int b=++a; ?→?a=4, b=4 | int a=3; int b=a++; ?→?a=4, b=3 |
-- | 自減(-1) | int a=3; int b=--a; ?→?a=2, b=2 | int a=3; int b=a--; ?→?a=2, b=3 |
注意:自增 / 自減運算符僅能作用于變量(如5++
為錯誤寫法),且在復雜表達式中需注意優先級(見后文)。
二、類型轉換(隱式與強制)
當不同數據類型的操作數參與運算時,會發生類型轉換,確保運算統一。
1. 隱式轉換(自動類型轉換)
- 規則:小范圍類型自動轉換為大范圍類型(避免精度損失),轉換順序為:
byte → short → int → long → float → double
(char
?可轉換為?int
,因字符對應 ASCII 碼)。 - 示例:
int a = 10; long b = a; // 正確:int(4字節)→ long(8字節) float c = 3.14f; double d = c; // 正確:float → double
2. 強制轉換(顯式類型轉換)
- 規則:大范圍類型需手動轉換為小范圍類型,語法為?
(目標類型) 操作數
。 - 注意:可能導致精度損失或溢出(需手動控制風險)。
- 示例:
double a = 3.9; int b = (int) a; // 結果為3(精度損失) long c = 10000000000L; int d = (int) c; // 結果為-2147483648(溢出,因int范圍為-2^31~2^31-1)
一個練習進行記憶
三、字符串和字符的 “+” 操作
“+” 在 Java 中除算術加法外,還可用于字符串拼接或字符與其他類型的混合運算,規則如下:
-
字符串與任何類型拼接:結果為字符串(其他類型自動轉換為字符串)。
示例:String s = "age: " + 18; // 結果為 "age: 18" String s2 = "a" + true; // 結果為 "atrue"
-
多個 “+” 連續運算:從左到右執行,若左側出現字符串,則后續均為拼接;否則先執行算術運算。
示例:int a = 10; String s3 = 5 + 3 + "a"; // 先算5+3=8,再拼接 → "8a" String s4 = "a" + 5 + 3; // 從左到右拼接 → "a53"
-
字符(char)與數字相加:char 會轉換為對應 ASCII 碼(int 類型),執行算術加法。
示例:char c = 'a'; // ASCII碼為97 int sum = c + 1; // 結果為98('b'的ASCII碼)
四、賦值運算符
賦值運算符用于將右側值賦給左側變量,包括基本賦值和復合賦值。
1. 基本賦值運算符(=)
- 功能:將右側表達式結果賦給左側變量(左側必須是可修改的變量,不能是常量)。
- 示例:
int a = 5;
2. 復合賦值運算符
復合賦值是 “算術運算 + 賦值” 的簡寫,語法為?變量 運算符= 操作數
,等價于?變量 = (變量類型)(變量 運算符 操作數)
(隱含強制轉換)。
運算符 | 等價寫法 | 示例 |
---|---|---|
+= | a += b ?→?a = (a類型)(a + b) | short s=1; s += 2; ?→ 正確(隱含 short 轉換) |
-= | a -= b ?→?a = (a類型)(a - b) | int a=5; a -= 3; ?→?a=2 |
*= | a *= b ?→?a = (a類型)(a * b) | double d=2; d *= 3; ?→?d=6 |
/= | a /= b ?→?a = (a類型)(a / b) | int a=10; a /= 3; ?→?a=3 |
%= | a %= b ?→?a = (a類型)(a % b) | int a=7; a %= 3; ?→?a=1 |
注意:復合賦值的隱含強制轉換可避免部分類型錯誤,例如?short s=1; s = s + 2;
?會報錯(s+2 為 int),但?s += 2
?正確。
五、關系運算符
關系運算符用于判斷兩個操作數的關系,結果為boolean 類型(true
?或?false
)。
運算符 | 功能 | 示例 |
---|---|---|
== | 等于 | 3 == 5 → false |
!= | 不等于 | 3 != 5 → true |
> | 大于 | 5 > 3 → true |
< | 小于 | 5 < 3 → false |
>= | 大于等于 | 5 >= 5 → true |
<= | 小于等于 | 3 <= 2 → false |
注意:
- 區分?
==
(判斷相等)和?=
(賦值),例如?if(a=3)
?會恒為?true
(因賦值結果為 3,非 0 即真),是常見錯誤。 - 引用類型的?
==
?判斷地址是否相同,而非內容(內容判斷需用?equals()
?方法)。
六、邏輯運算符
邏輯運算符用于連接 boolean 表達式,執行邏輯判斷,結果為 boolean 類型。
1. 基本邏輯運算符(非短路)
運算符 | 功能 | 運算規則(a、b 為 boolean) | 示例 | ||
---|---|---|---|---|---|
& | 邏輯與(且) | 全為 true 則 true,否則 false | true & false → false | ||
邏輯或(或) | 至少一個 true 則 true,全 false 則 false | `true | false → true` | ||
! | 邏輯非(取反) | true→false,false→true | !true → false | ||
^ | 邏輯異或 | 兩個結果不同則 true,相同則 false | true ^ true → false |
特點:無論左側結果如何,右側表達式都會執行(例如?(3>5) & (a++)>0
?中,a++
?會執行)。
2. 短路邏輯運算符
運算符 | 功能 | 運算規則(a、b 為 boolean) | 示例 | ||||
---|---|---|---|---|---|---|---|
&& | 短路與 | 左側為 false 時,右側不執行,結果為 false;左側為 true 時,需判斷右側 | (3>5) && (a++)>0 ?→?a 不變 | ||||
短路或 | 左側為 true 時,右側不執行,結果為 true;左側為 false 時,需判斷右側 | `(3<5) | (a++)>0→ a` 不變 |
優勢:短路特性可提高效率(避免無用計算),例如?if(obj != null && obj.getValue() > 0)
?可避免空指針異常(若 obj 為 null,右側不執行)。
七、三元運算符
三元運算符是 Java 中唯一的三目運算符,語法為:
條件表達式 ? 表達式1 : 表達式2
-
功能:條件表達式為 true 時,執行表達式 1;否則執行表達式 2。
-
示例:
int max = (5 > 3) ? 5 : 3; // 結果為5 String res = (score >= 60) ? "及格" : "不及格";
-
注意:表達式 1 和表達式 2 的類型必須兼容(可自動轉換或顯式轉換),否則編譯報錯。例如?
(3>2) ? 1 : 2.0
?會報錯(int 與 double 不兼容)。
八、運算符優先級
當多個運算符混合使用時,優先級決定執行順序(優先級高的先執行),可通過括號?()
?改變優先級(括號優先級最高)。從高到低的優先級順序如下:
- 括號:
()
- 單目運算符:
++
、--
、!
- 算術運算符:
*
、/
、%
(高于?+
、-
) - 關系運算符:
>
、<
、>=
、<=
(高于?==
、!=
) - 邏輯運算符:
!
(高于?&&
,&&
?高于?||
) - 三元運算符:
? :
- 賦值運算符:
=
、+=
、-=
?等
示例:
int a = 3;
int b = 5;
int c = a + b * 2; // 先算b*2=10,再算a+10 → 13
int d = (a + b) * 2; // 括號優先,先算a+b=8,再*2 → 16
boolean e = a > 2 && b < 4 || !false; // 等價于 (a>2 && b<4) || true → false || true → true
九、總結
Java 運算符是程序邏輯的基礎,掌握各類運算符的功能、轉換規則、短路特性及優先級,可避免常見錯誤(如整數除法精度問題、短路邏輯的副作用、==
?與?=
?混淆等)。實際開發中,建議通過括號明確運算順序,提高代碼可讀性。
通過合理使用運算符,能高效實現數值計算、邏輯判斷、變量賦值等核心功能,是 Java 編程的必備技能。