java switch基礎介紹及具體使用方法

2022-04-22 14:29 更新

在編寫代碼時,邏輯判斷是避免不了的,switch case語句在很多編程語言中的功能都是用于條件判斷,java中為多路分支選擇流程專門提供了switch語句,switch語句根據(jù)一個表達式的值,選擇運行多個操作中的一個。當需要對選項進行等值判斷時,使用switch語句更加簡潔明了。switch的case語句可以處理int,short,byte,char類型的值,但是不能處理long,String等類型。說起來你應該也會想到另一個常用的條件判斷語句if else,本文重點介紹java中switch case語句的用法,但是會在篇末對兩種語句的區(qū)別做一個總結(jié)。


java switch


java switch基礎語法

switch(表達式){ 
case 表達式常量1:語句1; 
break; 
case 表達式常量2:語句2; 
break; 
...... 
case 表達式常量n:語句n; 
break; 
[default:語句n+1;] 
} 

其中,一個case表達式常量成為標號,代表一個case分支的入口。switch語句在運行時首先計算switch圓括號中“表達式”的值,這個值必須是整型或字符型的,同時后面各個case表達式常量的值的類型應與switch圓括號中“表達式”的值類型一致。一個case語句代表一個制定操作,然后轉(zhuǎn)向結(jié)構(gòu)出口。default子句是可選的,當表達式的值與case表達式常量的值都不匹配時,就運行default子句,轉(zhuǎn)向結(jié)構(gòu)出口。 

java里switch的執(zhí)行順序

switch表達式的值決定選擇哪個case分支,如果找不到相應的分支,就直接從"default" 開始輸出。
當程序執(zhí)行一條case語句后,因為例子中的case分支中沒有break 和return語句,所以程序會執(zhí)行緊接于其后的語句?!?nbsp;

public class Switch {
    public static void main(String[] args)
     {
        int x=0;
       switch(x)
       {
        default:
            System.out.println("default");
        case 1:
            System.out.println(1);
        case 2:
            System.out.println(2);
        }
    }
}

 輸出結(jié)果如下:

default
1
2

public class Switch {
    public static void main(String[] args) {
        int x = 0;
        switch (x) {
        default:
            System.out.println("default");
        case 0:
            System.out.println(0);
        case 1:
            System.out.println(1);
       case 2:
            System.out.println(2);
        }
    }
}
輸出結(jié)果如下:
0
1
2

public class Switch {
    public static void main(String[] args) {
        int x = 0;
        switch (x) {
        case 0:
            System.out.println(0);
        case 1:
            System.out.println(1);
        case 2:
            System.out.println(2);
        default:
            System.out.println("default");
        }
    }
}
輸出結(jié)果如下:
0
1
2
default

java switch語句注意事項

java switch語句注意事項

switch(A),括號中A的取值只能是整型或者可以轉(zhuǎn)換為整型的數(shù)值類型,比如byte、short、int、char、還有枚舉;需要強調(diào)的是:long和String類型是不能作用在switch語句上的。

     

case B:C;case是常量表達式,也就是說B的取值只能是常量(需要定義一個final型的常量,后面會詳細介紹原因)或者int、byte、short、char(比如1、2、3、200000000000(注意了這是整型)),如果你需要在此處寫一個表達式或者變量,那么就要加上單引號; case后的語句可以不用大括號,就是C不需要用大括號包裹著;

     

default就是如果沒有符合的case就執(zhí)行它,default并不是必須的。


案例分析:

1.標準型(case后面都有break語句,case后的值都是整數(shù))

int i=3; 
switch(i) 
{ 
case 1: 
System.out.println(1); 
break; 
case 2: 
System.out.println(2); 
break;  
default: 
System.out.println("default"); 
break; 
} 

2.常量型(case后面都有break語句,case后的值都是常量)

private final int NUM1=1;
private final int NUM2=1;
int i=3; 
switch(i) 
{ 
case NUM1: 
System.out.println(1); 
break; 
case NUM2: 
System.out.println(2); 
break;  
default: 
System.out.println("default"); 
break; 
} 

3.表達式型(case后面都有break語句,case后的值都是表達式)

int i=3; 
int b = 2;
switch(i) 
{ 
case ‘類名.getId()‘: 
System.out.println(1); 
break; 
case ‘b‘ 
System.out.println(2); 
break;  
default: 
System.out.println("default"); 
break; 
}

實例:java 用switch語句解決月薪范圍問題
public class SwitchDemo {
    public static void main(String[] args) {
 
        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}

switch和if語句的區(qū)別

Java中switch和if語句的區(qū)別

switch和if語句都是Java的選擇語句,這兩種語句都是允許在程序運行時控制程序的執(zhí)行過程。

switch和if-else相比,由于使用了Binary Tree算法,絕大部分情況下switch會快一點,除非是if-else的第一個條件就為true。 


編譯器編譯switch與編譯if...else...不同。不管有多少case,都直接跳轉(zhuǎn),不需逐個比較查詢。 

 

相比于if-else結(jié)構(gòu),switch的效率絕對是要高很多的,但是switch使用查找表的方式?jīng)Q定了case的條件必須是一個連續(xù)的常量。而if-else則可以靈活的多。

  
switch效率高,從匯編代碼可以看出來。switch只計算一次值,然后都是test。
  

switch的效率與分支數(shù)無關(guān)。當只有分支比較少的時候,if效率比switch高(因為switch有跳轉(zhuǎn)表)。分支比較多,那當然是使用switch。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號