切換宣告

switch 語句是 Java 的多路分支語句。它被用來代替長 if-else if-else 鏈,使它們更具可讀性。但是,與 if 陳述不同,人們可能不會使用不等式; 必須具體定義每個值。

switch 語句有三個關鍵元件:

  • case:這是與 switch 語句的引數等價求值的值。
  • default:如果 case 語句都沒有評估為 true,那麼這是一個可選的,全能的表示式。
  • 突然完成 case 宣告; 通常 break:這是為了防止對進一步的發言進行不期望的評估。

除了 continue 之外,可以使用任何會導致語句突然完成的語句 。這包括:

  • break
  • return
  • throw

在下面的示例中,典型的 switch 語句包含四種可能的情況,包括 default

Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
switch (i) {
    case 0:
        System.out.println("i is zero");
        break;
    case 1:
        System.out.println("i is one");
        break;
    case 2:
        System.out.println("i is two");
        break;
    default:
        System.out.println("i is less than zero or greater than two");
}

通過省略 break 或任何突然完成的陳述,我們可以利用所謂的跌倒案例,該案例針對多個值進行評估。這可用於建立值成功的範圍,但仍然不如不等式靈活。

Scanner scan = new Scanner(System.in);
int foo = scan.nextInt();
switch(foo) {
    case 1:
        System.out.println("I'm equal or greater than one");
    case 2:
    case 3:    
        System.out.println("I'm one, two, or three");
        break;
    default:
        System.out.println("I'm not either one, two, or three");
}

foo == 1 的情況下,輸出將是:

I'm equal or greater than one
I'm one, two, or three

foo == 3 的情況下,輸出將是:

I'm one, two, or three

Version >= Java SE 5

switch 語句也可以與 enums 一起使用。

enum Option {
    BLUE_PILL,
    RED_PILL
}

public void takeOne(Option option) {
    switch(option) {
        case BLUE_PILL:
            System.out.println("Story ends, wake up, believe whatever you want.");
            break;
        case RED_PILL:
            System.out.println("I show you how deep the rabbit hole goes.");
            break;
            
    }
}

Version >= Java SE 7

switch 語句也可以與 Strings 一起使用。

public void rhymingGame(String phrase) {
    switch (phrase) {
        case "apples and pears":
            System.out.println("Stairs");
            break;
        case "lorry":
            System.out.println("truck");
            break;
        default:
            System.out.println("Don't know any more");
    }
}