W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在編寫代碼時(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é)。
switch(表達(dá)式){
case 表達(dá)式常量1:語(yǔ)句1;
break;
case 表達(dá)式常量2:語(yǔ)句2;
break;
......
case 表達(dá)式常量n:語(yǔ)句n;
break;
[default:語(yǔ)句n+1;]
}
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é)果如下:
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é)果如下: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é)果如下: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;
}
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-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。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: