W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在編寫代碼時,邏輯判斷是避免不了的,switch case語句在很多編程語言中的功能都是用于條件判斷,java中為多路分支選擇流程專門提供了switch語句,switch語句根據(jù)一個表達式的值,選擇運行多個操作中的一個。當需要對選項進行等值判斷時,使用switch語句更加簡潔明了。switch的case語句可以處理int,short,byte,char類型的值,但是不能處理long,String等類型。說起來你應該也會想到另一個常用的條件判斷語句if else,本文重點介紹java中switch case語句的用法,但是會在篇末對兩種語句的區(qū)別做一個總結(jié)。
switch(表達式){
case 表達式常量1:語句1;
break;
case 表達式常量2:語句2;
break;
......
case 表達式常量n:語句n;
break;
[default:語句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),括號中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;
}
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會快一點,除非是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。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: