switch語法在項目使用的頻率很低,今天看到一個相關的例子引發一些思考,,同時自己也寫了一些簡單的例子如下:
實例1:
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"); }
運行結果:
default 1111 2222 3333
實例2:
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"); }
運行結果:
3333
實例3:
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"); }
運行結果:
5555 2222 default
爲了弄清楚這是怎麼回事,首先從JDK文檔入手。從文檔可以瞭解一下幾點。
https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.11
1.如果switch表達式中的值與case常量其中一個相等,可以說與case的標籤是匹配的,在switch塊中,在當前匹配的case的後面的語句,不管是否匹配都將會執行。
2.如果沒有與case標籤相匹配的,但是存在default標籤,在switch塊中,default以及default後面的語句都將會順序執行。
3.既沒有case標籤匹配也沒有default標籤,switch中的語句將不會執行。
實例1對應情況是2,實例3對應情況3.
如何來避免這種情況?使用break。
繼續看一下其他語言的情況。
一、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
二、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
三、Python並沒有switch
Why isn’t there a switch or case statement in Python?
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。