java switch基礎(chǔ)介紹及具體使用方法

2022-04-22 14:29 更新

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


java switch


java switch基礎(chǔ)語(yǔ)法

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

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

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

switch表達(dá)式的值決定選擇哪個(gè)case分支,如果找不到相應(yīng)的分支,就直接從"default" 開始輸出。
當(dāng)程序執(zhí)行一條case語(yǔ)句后,因?yàn)槔又械腸ase分支中沒(méi)有break 和return語(yǔ)句,所以程序會(huì)執(zhí)行緊接于其后的語(yǔ)句?!?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語(yǔ)句注意事項(xiàng)

java switch語(yǔ)句注意事項(xiàng)

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

     

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

     

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


案例分析:

1.標(biāo)準(zhǔn)型(case后面都有break語(yǔ)句,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語(yǔ)句,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.表達(dá)式型(case后面都有break語(yǔ)句,case后的值都是表達(dá)式)

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; 
}

實(shí)例:java 用switch語(yǔ)句解決月薪范圍問(wèn)題
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語(yǔ)句的區(qū)別

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

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

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


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

 

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

  
switch效率高,從匯編代碼可以看出來(lái)。switch只計(jì)算一次值,然后都是test。
  

switch的效率與分支數(shù)無(wú)關(guān)。當(dāng)只有分支比較少的時(shí)候,if效率比switch高(因?yàn)閟witch有跳轉(zhuǎn)表)。分支比較多,那當(dāng)然是使用switch。


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)