From Gossip@caterpillar

Java Gossip: 比較、條件運算

數學上有比較的運算,像是大於、等於、小於等等,Java中也提供了這些運算子,這些運算子稱之為「比較運算子」(Comparison operator),它們有大於(>)不小於(>=)小於(<)不大於(<=)等於(==)以及不等於(!=)

在Java中,比較的條件成立時以true表示,比較的條件不成立時 以false表示,請您看看下面這幾行會顯示哪些數值:
System.out.println("10 >  5  -> " + (10 > 5));
System.out.println("10 >= 5  -> " + (10 >= 5));
System.out.println("10 <  5  -> " + (10 < 5));
System.out.println("10 <= 5  -> " + (10 <= 5));
System.out.println("10 == 5  -> " + (10 == 5));
System.out.println("10 != 5  -> " + (10 != 5));

程式的執行如下所示:

10 >  5  -> true
10 >= 5  -> true
10 <  5  -> false
10 <= 5  -> false
10 == 5  -> false
10 != 5  -> true


比較運算在使用時有個即使是程式設計老手也可能犯的錯誤,且不容易發現,也就是等於 運算子(==),注意它是兩個連續的等號(=)所組成,而不是一個等號,一個等號是指定運算子,這點必須相當注意,例如若有兩個變數x與y 要比較是否相等,是寫成x == y,而不是x = y,後者的作用是將y的值指定給x,而不是比較運算。

另一個使用 == 運算時要注意的是,對於物件來說,兩個物件參考之間使用 == 作比較時,是比較其名稱是否參考至同一物件,而不是比較其內容,您可以參考 不可變的 (immutable)字串 瞭解一下這段話的意義。

即然談到了條件式的問題,來介紹Java中的「條件運算子」 (Conditional operator),它的使用方式如下:
條件式 ? 成立傳回值 : 失敗傳回值

條件運算子的傳回值依條件式的結果而定,如果條件式的結果為true,則傳回冒號前的值,若為false,則傳回冒號後的值,下面這個程式可以作個簡單的 示範:

  • ConditionalOperator.java
import java.util.Scanner;

public class ConditionalOperator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.print("請輸入學生分數: ");
int scoreOfStudent = scanner.nextInt();
System.out.println("該生是否及格? " +
(scoreOfStudent >= 60 ? '是' : '否'));
}
}

執行結果:
請輸入學生分數: 77
該生是否及格? 是


這個程式會依您所輸入的分數來判斷學生成績是否不小於60分,以決定其是否及格,如果是則傳回字元 '是' ,否則傳回字元 '否'。

條件運算子(?:)相當的好用,使用得當的話可以省去不少的程式碼,例如下面這個程式可以判斷使用者輸入是否為奇數。

  • ConditionalOperator.java
import java.util.Scanner;

public class ConditionalOperator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.print("請輸入數字: ");
int inputedNumber = scanner.nextInt();
System.out.println("是否為奇數? " +
(inputedNumber%2 != 0 ? '是' : '否'));
}
}

當輸入的數為奇數時,就不能被2整除,所以餘數一定不是0,在條件式中判斷為true,因而傳回字元 '是' ,若數值為偶數,則2整除,所以餘數為0,在條件式中判斷為false,所以傳回字元 '否'。