java switch/case你不知道的事情
日常小記
switch/case大家都經常用,可能東西比較簡單,以前從沒有留意過,或者課本知識讀的少忘得快,對switch/case執行流程瞭解不夠深入,今天專門測試了下,得出如下結論:
/* 1.switch/case執行流程是:
* a.遇到匹配的case,並且該case有break則流程執行完畢;
* b.遇到匹配的case,如果該case沒有break則流程繼續執行,直到遇到break或者流程的結束;
* c.如果沒有匹配的case,則執行default;沒有default就什麼也不做。
* 2.如果沒有匹配的case,肯定會執行default;
* 如果有匹配的case,這時我們把default當成一個case來對待。
*
*/
看看測試的程式碼:
package zzone.example; public class SwitchCase { public static void Normal(){ int i = 10; switch (i) { case 10: System.out.println(10); break; case 20: System.out.println(20); break; default: System.out.println("default"); break; } System.out.println("----->10"); } public static void Special(){ int i = 10; switch (i) { default: System.out.println("default"); //break; case 10: System.out.println(10); case 20: System.out.println(20); break; } System.out.println("----->10 20"); } public static void Special1(){ int i = 10; switch (i) { default: System.out.println("default"); //break; case 10: System.out.println(10); case 20: System.out.println(20); //break; } System.out.println("----->10 20"); } public static void Special2(){ int i = 10; switch (i) { case 10: System.out.println(10); case 20: System.out.println(20); default: System.out.println("default"); //break; } System.out.println("----->10 20 default"); } public static void Special3(){ int i = 10; switch (i) { case 10: System.out.println(10); case 20: System.out.println(20); break; default: System.out.println("default"); //break; } System.out.println("----->10 20(因為有break,沒執行default)"); } public static void Special4(){ int i = 10; switch (i) { case 10: System.out.println(10); default: System.out.println("default"); //break; case 20: System.out.println(20); break; } System.out.println("----->10 default 20(default當成case看待)"); } public static void Special5(){ int i = 10; switch (i) { case 0: System.out.println(0); case 10: System.out.println(10); case 20: System.out.println(20); default: System.out.println("default"); //break; } System.out.println("----->10 20 default"); } public static void Special6(){ int i = 1; switch (i) { case 0: System.out.println(0); case 10: System.out.println(10); case 20: System.out.println(20); default: System.out.println("default"); } System.out.println("----->default"); } public static void Special7(){ int i = 100; switch (i) { case 0: System.out.println(0); case 10: System.out.println(10); break; case 20: System.out.println(20); default: System.out.println("default"); } System.out.println("----->default"); } public static void Special8(){ int i = 100; switch (i) { case 0: System.out.println(0); case 10: System.out.println(10); case 20: System.out.println(20); } System.out.println("----->空"); } public static void main(String[] args) { /* 1.switch/case執行流程是: * a.遇到匹配的case,並且該case有break則流程執行完畢; * b.遇到匹配的case,如果該case沒有break則流程繼續執行(排除default的),直到遇到break或者流程的結束; * c.如果沒有匹配的case,則執行default;沒有default就什麼也不做。 * 2.如果沒有匹配的case,肯定會執行default; * 如果有匹配的case,這時我們把default當成一個case來對待。 * */ System.out.println("-------Normal-----------"); Normal(); System.out.println("-------0-----------"); Special(); System.out.println("-------1-----------"); Special1(); System.out.println("-------2-----------"); Special2(); System.out.println("-------3-----------"); Special3(); System.out.println("-------4-----------"); Special4(); System.out.println("-------5-----------"); Special5(); System.out.println("-------6-----------"); Special6(); System.out.println("-------7-----------"); Special7(); System.out.println("-------8-----------"); Special8(); } }
執行結果:
-------Normal-----------
10
----->10
-------0-----------
10
20
----->10 20
-------1-----------
10
20
----->10 20
-------2-----------
10
20
default
----->10 20 default
-------3-----------
10
20
----->10 20(因為有break,沒執行default)
-------4-----------
10
default
20
----->10 default 20(default當成case看待)
-------5-----------
10
20
default
----->10 20 default
-------6-----------
default
----->default
-------7-----------
default
----->default
-------8-----------
----->空
*********************************************************************************************************************
寧願做錯了而後悔,也不要錯過了而後悔!