java中switch條件語句的三種語法、用法及支持的參數(shù)類型
一、switch的應(yīng)用場景
在分支結(jié)構(gòu)中,我們除了使用if-else或者是if-else if之外,當(dāng)分支量過大的時候,我們即可選擇使用switch語句進行選擇
二、switch三種語法
Java中switch的三種用法詳解:
- switch 標(biāo)準(zhǔn)方式
- switch - > 用法
- switch yield 用法
2.1、switch 標(biāo)準(zhǔn)方式
語法:
switch (表達式) { case 值1: // 執(zhí)行語句塊1 break; case 值2: // 執(zhí)行語句塊2 break; ... case 值N: // 執(zhí)行語句塊N break; default: // 如果以上所有case都不匹配,執(zhí)行默認語句塊 }
case語句中指定的每個值必須具有與表達式兼容的類型。switch語句的執(zhí)行順序是,首先計算表達式的值,然后將該值與每個case的值進行比較,如果找到匹配的case,則執(zhí)行該case下的語句,直到遇到break語句或switch語句結(jié)束
。如果沒有找到匹配的case,且存在default子句,則執(zhí)行default子句中的語句。如果沒有匹配的case且沒有default子句,程序?qū)⒉粓?zhí)行任何操作。
注意:若表達式的值與case后面的值匹配則會執(zhí)行該case下的語句,但是若該case下沒有break,則會一直往下執(zhí)行,直到遇到break語句或switch語句結(jié)束
注意
1.表達式支持的參數(shù)類型:JDK1.0-1.4 數(shù)據(jù)類型接受 byte、short、int、char
JDK1.5 數(shù)據(jù)類型接受 byte、short、int、char、enum(枚舉)、(包裝類型Character、Byte、Short、Integer)
JDK1.7 數(shù)據(jù)類型接受 byte、short、int、char、enum(枚舉)、包裝類型、String 六種類型
(1)對四個包裝類的支持是因為java編譯器在底層手動進行拆箱。
(2)而對枚舉類的支持是因為枚舉類有一個ordinal方法,該方法實際上是一個int類型的數(shù)值。
(3)jdk1.7開始支持String類型,但實際上String類型有一個hashCode算法,結(jié)果也是int類型。
(4)而byte short char類型可以在不損失精度的情況下向上轉(zhuǎn)型成int類型.所以總的來說,可以認為switch中只支持int類型。
float、double都不能用于switch語句。
2.default 子句是可選的,當(dāng)沒有匹配的 case 時,執(zhí)行default3.break語句用來在執(zhí)行完一個 case 分支后使程序跳出 switch 語句塊;如果沒有寫 break,程序會順序執(zhí)行到 switch 結(jié)尾,除非遇到break。
2.2、switch - > 用法
jdk12開始switch語法支持函數(shù)式接口和lambda表達式
使用switch標(biāo)準(zhǔn)方式編寫代碼太多的break造成代碼冗余可讀性不高 可以借助函數(shù)式接口和lambda表達式簡化書寫
代碼如下:
switch (表達式) { case 值1 -> 執(zhí)行語句塊1; case 值2 -> 執(zhí)行語句塊2; ...... case 值N -> 執(zhí)行語句塊N; default: // 如果以上所有case都不匹配,執(zhí)行默認語句塊 }
使用 - > 方法更加簡單, ->的用法其實只是相當(dāng)于不用輸入break就可以跳出判斷, 保證其只有一條分支可走.
示例:
int dayOfWeek = 2; switch (dayOfWeek) { case 1 -> System.out.println("星期一"); case 2 -> System.out.println("星期二"); case 3 -> System.out.println("星期三"); case 4 -> System.out.println("星期四"); case 5 -> System.out.println("星期五"); case 6 -> System.out.println("星期六"); default -> System.out.println("星期日"); }
輸出結(jié)果為:
星期二
jdk12之后還可以多條件合并
int dayOfWeek = 2; switch (dayOfWeek) { case 1,2,3,4,5 -> System.out.println("工作日"); default -> System.out.println("其他"); }
2.2、switch yield 用法
jdk14新特性,增加了yield用法
int numLetters = switch(seasonName){ case "Spring" ->{ System.out.println("spring time"); yield 6; } case "Summer","Winter" -> 6; //可以使用yield關(guān)鍵字,也可以省略 case "Fall" -> 4; default -> -1; };
這里來說, switch 作為了 一條語句, 所以末尾要加冒號
, 其他用法相同
示例:
int dayOfWeek = 2; String weekday = switch (dayOfWeek) { case 1: yield "星期一"; case 2: yield "星期二"; case 3: yield "星期三"; case 4: yield "星期四"; case 5: yield "星期五"; case 6: yield "星期六"; default: yield "星期日"; }; System.out.println(weekday);
三、什么是case穿透?
在java的switch非簡化語句中,當(dāng)匹配到的case中沒加break;的時候,那就會執(zhí)行當(dāng)前case里面的語句,以及這個switch語句中當(dāng)前case下面的所有case中或者是default中的語句。直到遇到break;為止
以下是有關(guān)case穿透的實驗代碼:
public static void main(String[] args) { String date = "周二"; switch(date){ case "周一": System.out.println("周一"); case "周二": System.out.println("周二"); case "周三": System.out.println("周三"); default: System.out.println("其他"); } }
輸出周二、周三、其他
四、示例
4.1、標(biāo)準(zhǔn)示例
public static void main(String[] args) { String date = "周一"; switch(date){ case "周一": System.out.println("工作日"); break; case "周二": System.out.println("工作日"); break; case "周三": System.out.println("工作日"); break; default: System.out.println("其他"); break; } }
4.2、錯誤示例
由于switch語句中整體都沒加break, 所以語句會在遇到第一個符合的case開始執(zhí)行,直到遇到break或switch語句結(jié)束
public static void main(String[] args) { String date = "周二"; switch(date){ case "周一": System.out.println("周一"); case "周二": System.out.println("周二"); case "周三": System.out.println("周三"); default: System.out.println("其他"); } }
輸出周二、周三、其他
4.3、引申用法(多條件合并)
上面寫的案例感覺很多邏輯重復(fù)的,能否多個條件合并在一起呢?當(dāng)然是可以的
方式一:
public static void main(String[] args) { String date = "周一"; switch(date){ case "周一": case "周二": case "周三": System.out.println("工作日"); break; default: System.out.println("其他"); break; } }
由于case "周一"后面沒有跟break;所以會一直走下去,直到遇到break。因此可以利用這種方式實現(xiàn)少些代碼。
方式二:java14引入
注意:此種方式需要jdk版本是jdk14及以上
public static void main(String[] args) { String date = "周一"; switch(date){ case "周一","周二","周三": System.out.println("工作日"); break; default: System.out.println("其他"); break; } }
總結(jié)
到此這篇關(guān)于java中switch條件語句的三種語法、用法及支持的參數(shù)類型的文章就介紹到這了,更多相關(guān)java switch條件語句用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springMVC?@RestControllerAdvice注解使用方式
這篇文章主要介紹了springMVC?@RestControllerAdvice注解使用方式,下面通過一個簡單的示例,演示如何使用?@RestControllerAdvice,感興趣的朋友跟隨小編一起看看吧2024-08-08idea環(huán)境下Maven無法正常下載pom中配置的包問題
這篇文章主要介紹了idea環(huán)境下Maven無法正常下載pom中配置的包的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06說說字符串轉(zhuǎn) OffSetDateTime 你真的會用嗎
這篇文章主要介紹了字符串轉(zhuǎn) OffSetDateTime 你真的會用嗎?具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08java8 LocalDate LocalDateTime等時間類用法實例分析
這篇文章主要介紹了java8 LocalDate LocalDateTime等時間類用法,結(jié)合具體實例形式分析了LocalDate、LocalTime、LocalDateTime等日期時間相關(guān)類的功能與具體使用技巧,需要的朋友可以參考下2017-04-04