Java 入門指南
單元 5 - 運算式與陳述
運算式 (expression) 由運算元 (operand) 與運算子 (operator) 所組成
上圖為運算式常見的形式,多數運算子都需要兩個運算元,另有一個需要三個運算元的運算子。
單一運算元就構成一個運算式,運算元可以是變數 (variable) 、字面常數 (literal) 或方法呼叫 (method invocation) ,例如
// 以變數當運算元
a;
// 以字面常數當運算元
3;
// 呼叫 println() 當運算元
System.out.println();
運算式,顧名思義,其為運算出一個結果的式子,因此單一運算元的運算式所得到的結果就是運算元的值,如果是方法呼叫,就是方法的回傳值 (return value) 囉!
單一運算元也可以結合單元運算子,單元運算子有
運算子 | 功能 | 範例 |
---|---|---|
+ | 正 | +a |
- | 負 | -a |
++ | 遞增 | ++a, a++ |
-- | 遞減 | --a, a-- |
! | 邏輯補數運算子 | !a |
正負如一般數學表示正負值一樣,同樣的,負負會得正
int a = -3;
int b = +a; // b 會等於 -3
int c = -a; // c 會等於 3
遞增、遞減則是會將整數變數遞增 1 或遞減 1 ,有前後之別
int a = 3;
int b = ++a; // b 會等於 4
int c = a++; // c 會等於 3
int d = --a; // d 會等於 2
int e = a--; // e 會等於 3
邏輯補數運算子會把 true 變成 false , false 變成 true
boolean a = true;
boolean b = !a; // b 會等於 false
boolean c = !b; // c 會等於 true
一般運算子都須結合兩個運算元,例如算術運算子 (arithmetic operator) ,可用在整數 (integer) 及浮點數 (floating-point number) ,計算結果也為整數或浮點數
運算子 | 功能 | 範例 |
---|---|---|
+ | 加 | a + b |
- | 減 | a - b |
* | 乘 | a * b |
/ | 除 | a / b |
% | 取餘數 | a % b |
例如
int a = 11;
int b = a + 33; // b 會等於 44
int c = b - 22; // c 會等於 22
int d = c * 11; // d 會等於 242
int e = d / 44; // e 會等於 5
int f = e % 55; // f 會等於 5
相等性及關係運算子 (equality and relational operator) ,可用於整數及浮點數或布林值 (Boolean value) ,計算結果不是 true 就是 false
運算子 | 功能 | 範例 |
---|---|---|
== | 相等 | a == b |
!= | 不相等 | a != b |
> | 大於 | a >= b |
>= | 大於等於 | a >= b |
< | 小於 | a < b |
<= | 小於等於 | a <= b |
例如
int a = 11;
int b = 22;
boolean c = a >= b; // c 會等於 false
boolean d = a <= b; // d 會等於 true
boolean e = c == d; // e 會等於 false
boolean f = a != b; // f 會等於 true
我們運用的等號,其實屬於指派運算子 (assignment operator) ,所謂的指派是把等號右邊的值給左邊的變數,如果右邊是物件 (object) ,變數就會得到物件的參考 (reference)
運算子 | 功能 | 範例 |
---|---|---|
= | 指派 | a = b |
+= | 相加同時指派 | a += b |
-= | 相減同時指派 | a -= b |
*= | 相乘同時指派 | a *= b |
/= | 相除同時指派 | a /= b |
%= | 取餘數同時指派 | a %= b |
例如
int a = 11;
a += 33; // a 會等於 44
a -= 22; // a 會等於 22
a *= 11; // a 會等於 242
a /= 44; // a 會等於 5
a %= 55; // a 會等於 5
有沒有看的眼花撩亂?居然有 f = a != b 之類的式子出來,這是因為運算子有計算的優先次序 (precedence) ,由於 != 的優先順序在 = 之前,所以 a != b 會先被計算,結果才會指派到 f 之中。如果不是很清楚各個運算子的優先次序,保險一點的做法可以用小括弧,把要先計算的運算式用小括弧圍起來,例如
f = (a != b); //等於 f = a != b
這是因為小括弧有最高的優先計算次序。
加上分號,運算式就是程式 (program) 中獨立的陳述 (statement) 。如果說 Java 程式的執行單位為類別 (class) ,每一次執行都必須啟動指定類別的 main() 方法 (method) ,陳述則是類別的執行單位,因為 JVM 呼叫 main() 之後,便開始從 main() 中由前而後,一個陳述接著一個陳述來執行。
陳述也有好幾種,最簡單的陳述就是單一個分號
; // 什麼事也不做的陳述
其他很多都是連帶運算式單獨一行的陳述,然而許多控制結構 (control structure) 是屬於多行的複合陳述 (compound statement) ,我們先來看看控制結構中的選擇吧!
相關教學影片
中英文術語對照 | |
---|---|
Boolean value | 布林值 |
arithmetic operator | 算術運算子 |
assignment operator | 指派運算子 |
compound statement | 複合陳述 |
control structure | 控制結構 |
equality and relational operator | 相等性及關係運算子 |
expression | 運算式 |
floating-point number | 浮點數 |
integer | 整數 |
literal | 字面常數 |
method invocation | 方法呼叫 |
object | 物件 |
operand | 運算元 |
operator | 運算子 |
precedence | 計算的優先次序 |
reference | 參考 |
return value | 回傳值 |
variable | 變數 |
重點整理 |
---|
1. 陳述是程式中執行的單位, Java 中的陳述要以分號結尾。 |
2. 運算式是 Java 程式最簡單的陳述之一。 |
3. 運算式由運算元與運算子組合而成。 |
4. 正號不會改變運算元的正負值,負號會負負得正。 |
5. 邏輯運算子包括且、條件式且、或、條件式或、互斥或、非。 |
6. 算術運算子包括遞增、遞減、加、減、乘、除、取餘數。 |
7. 比較運算子包括相等、不相等、大於、大於等於、小於、小於等於。 |
8. 等號是指派運算子,指派運算子可以和算術運算子、邏輯運算子連在一起用。 |
9. 小括弧具有最高的計算優先次序。 |
問題與討論 |
---|
1. 邏輯運算子可以運用在整數、浮點數或字串嗎? |
2. 字串為什麼可以用加法?那也可以用乘法、減法或除法嗎? |
3. 為什麼測試兩個變數相等的運算子為連續兩個等號? |
4. 為什麼計算的優先次序很重要? |
練習 |
---|
1. 建立一個新專案 Exercise0501 ,建立兩個 int 變數 a 及 b , a 設定為 2 , b 設定為 8 ,利用 + 、 - 、 * 、 / 、 % 計算出兩者加、減、乘、除、取餘數的結果。 |
2. 承上題,另建立一個新專案 Exercise0502 ,先在關鍵字 package 的下方加入以下程式碼
接著建立 Scanner 型態的物件,如下
繼續利用 scanner 的 nextInt() 方法取得使用者輸入的整數,將取得的整數指派給 a 及 b 後,然後再計算出結果。 |
3. 建立一個新專案 Exercise0503 ,宣告一個字串變數 a ,並且將 a 的值設定為 "*" ,然後印出 a 、 a + a 、 a + a + a 、 a + a + a + a 、 a + a + a + a + a 。 |