switch語法在項目使用的頻率很低,今天看到一個相關的例子引起一些思考,,同時本身也寫了一些簡單的例子以下:javascript
實例1:html
int dayOfWeek = 5; switch (dayOfWeek){ default: System.out.println("default"); case 1: System.out.println("1111"); case 2: System.out.println("2222"); case 4: System.out.println("3333"); }
運行結果:java
default 1111 2222 3333
實例2:python
int dayOfWeek = 5; switch (dayOfWeek){ default: System.out.println("default"); case 1: System.out.println("1111"); case 2: System.out.println("2222"); //diff case 5: System.out.println("3333"); }
運行結果:oracle
3333
實例3:this
int dayOfWeek = 5; switch (dayOfWeek){ case 1: System.out.println("1111"); //diff case 5: System.out.println("5555"); case 2: System.out.println("2222"); default: System.out.println("default"); }
運行結果:spa
5555 2222 default
爲了弄清楚這是怎麼回事,首先從JDK文檔入手。從文檔能夠了解一下幾點。code
https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.11htm
1.若是switch表達式中的值與case常量其中一個相等,能夠說與case的標籤是匹配的,在switch塊中,在當前匹配的case的後面的語句,無論是否匹配都將會執行。
2.若是沒有與case標籤相匹配的,可是存在default標籤,在switch塊中,default以及default後面的語句都將會順序執行。
3.既沒有case標籤匹配也沒有default標籤,switch中的語句將不會執行。blog
實例1對應狀況是2,實例3對應狀況3.
如何來避免這種狀況?使用break。
繼續看一下其餘語言的狀況。
1、JavaScript
var dayOfWeek = 5 switch (dayOfWeek){ default: console.log("default javascript") case 1: console.log("1111") case 2: console.log("2222") case 4: console.log("4444") }
運行結果:
default javascript 1111 2222 4444
var dayOfWeek = 2 switch (dayOfWeek){ case 1: console.log("1111") case 2: console.log("2222") case 4: console.log("4444") default: console.log("default javascript") }
運行結果:
2222 4444 default javascript
2、C
int day_week = 5; switch(day_week){ default : printf("%s\n", "default c"); case 1: printf("%s\n", "1111"); case 2: printf("%s\n", "2222"); case 3: printf("%s\n", "3333"); }
運行結果:
default c 1111 2222 3333
int day_week = 2; switch(day_week){ case 1: printf("%s\n", "1111"); case 2: printf("%s\n", "2222"); case 3: printf("%s\n", "3333"); default : printf("%s\n", "default c"); }
運行結果:
2222 3333 default c
3、Python並無switch
You can do this easily enough with a sequence of if... elif... elif... else
. There have been some proposals for switch statement syntax, but there is no consensus (yet) on whether and how to do range tests. See PEP 275 for complete details and the current status.
連接https://docs.python.org/2/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python
總結
這些語言對switch的詞法分析都是同樣的。switch這東西用的少,可是用的時候不要忘了break。