Java 入門指南

單元 5 - 運算式與陳述

~~學習進度表~~

運算式 (expression) 由運算元 (operand) 與運算子 (operator) 所組成

operand1 operator operand2

上圖為運算式常見的形式,多數運算子都需要兩個運算元,另有一個需要三個運算元的運算子。

單一運算元就構成一個運算式,運算元可以是變數 (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 變成 falsefalse 變成 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) ,我們先來看看控制結構中的選擇吧!

相關教學影片

上一頁 單元 4 - 變數命名規則
回 Java 入門指南首頁
下一頁 單元 6 - 選擇
回 Java 教材首頁
回程式語言教材首頁
中英文術語對照
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. The Java™ Tutorials: Operators
2. The Java™ Tutorials: Assignment, Arithmetic, and Unary Operators
3. The Java™ Tutorials: Equality, Relational, and Conditional Operators
4. The Java™ Tutorials: Bitwise and Bit Shift Operators
5. The Java™ Tutorials: Expressions, Statements, and Blocks
重點整理
1. 陳述是程式中執行的單位, Java 中的陳述要以分號結尾。
2. 運算式是 Java 程式最簡單的陳述之一。
3. 運算式由運算元與運算子組合而成。
4. 正號不會改變運算元的正負值,負號會負負得正。
5. 邏輯運算子包括且、條件式且、或、條件式或、互斥或、非。
6. 算術運算子包括遞增、遞減、加、減、乘、除、取餘數。
7. 比較運算子包括相等、不相等、大於、大於等於、小於、小於等於。
8. 等號是指派運算子,指派運算子可以和算術運算子、邏輯運算子連在一起用。
9. 小括弧具有最高的計算優先次序。
問題與討論
1. 邏輯運算子可以運用在整數、浮點數或字串嗎?
2. 字串為什麼可以用加法?那也可以用乘法、減法或除法嗎?
3. 為什麼測試兩個變數相等的運算子為連續兩個等號?
4. 為什麼計算的優先次序很重要?
練習
1. 建立一個新專案 Exercise0501 ,建立兩個 int 變數 aba 設定為 2b 設定為 8 ,利用 +-*/% 計算出兩者加、減、乘、除、取餘數的結果。
2. 承上題,另建立一個新專案 Exercise0502 ,先在關鍵字 package 的下方加入以下程式碼
import java.util.Scanner;
接著建立 Scanner 型態的物件,如下
Scanner scanner = new Scanner(System.in);
繼續利用 scannernextInt() 方法取得使用者輸入的整數,將取得的整數指派給 ab 後,然後再計算出結果。
3. 建立一個新專案 Exercise0503 ,宣告一個字串變數 a ,並且將 a 的值設定為 "*" ,然後印出 aa + aa + a + aa + a + a + aa + a + a + a + a