switch語句是常用的一種java語法,但是往往最基本的,總是最容易被人們忽略。
首先,看下switch語句的基本結構:
switch(表達式){ case 常量1: 語句1; break; case 常量2: 語句2; break; … … case 常量N: 語句N; break; [default: 語句; break;] }
從結構上很明顯,可以看出case和break一一對應,那么,有一個問題:“是否只有case滿足的情況下,才會執行內部的語句呢”,這個答案很多人覺得,那肯定的,真的嗎?
假如,滿足了一個case,可是沒有對應的break,那么,接下來的case內部的語句是否還會繼續執行?滿足的時候執行,不滿足就不執行,真的是這樣嗎?看一個簡單的例子:
public class SwitchTest { public static void main(String[] args) { testSwitch(1); } private static void testSwitch(int i) { switch (i) { case 1: System.out.println(1); case 2: System.out.println(2); break; default: System.out.println(3); } } }
觀察代碼可以看出,第一個case並沒有與之對應的break,那么,輸出結果是什么呢?估計很多人覺得很簡單啊,答案是:1。
但是,run一下,輸出的結果是:1 2
也就是說,第二個case內部的語句也執行了,奇怪嗎?剛開始我也覺得很奇怪,於是就只能查找資料,最后得出一個結果:
swtich中的case並不帶有判斷功能(也就是說並不是滿足執行,不滿足就不執行),case只相當於識別標志,遇到了符合的case,swtich內部就會改變該標志,從這個標志點一直往下執行,直到遇到break才會跳出。
所以上面執行到case 2的break才退出,如果把case 2 的break也刪除,答案就是:1 2 3