switch語句語法
switch (expression) {case value://語句break;//可選//可以有任意個case語句default://可選//語句}
注意點
switch的語句中表達式expression返回類型只能是byte、char、short、int和枚舉類型,java1.7開始支持String類型;
case語句值的類型必須與表達式expression的類型相同,并且是字面量或者是常量。
執行過程
從上到下進行匹配,一旦匹配到了,后面的語句塊都執行,直到執行完或者遇到break;
案例分析
今天在牛客網上刷到一個題目,下面代碼的輸出結果是什么:
int v1 = 0, v2 = 0, v3 = 0, v4 = 0;String str = "1314520";char[] s = str.toCharArray();for (int i = 0; i < s.length; i++) {switch (s[i]) {default:v4++;case '1':v1++;case '2':v2++;case '3':v3++;}}System.out.printf("%d,%d,%d,%d", v4, v1, v2, v3);
結果是3,5,6,7,是不是跟你的結果完全不一樣?
下面我們來分析程序的執行過程:
第一輪:s[i]=s[0]='1',會執行v1++;v2++;v3++;這時候v1=1,v2=1,v3=1,v4=0
第二輪:s[i]=s[1]='3',會執行v3++;這時候v1=1,v2=1,v3=2,v4=0
第三輪:s[i]=s[2]='1',會執行v1++;v2++;v3++;這時候v1=2,v2=2,v3=3,v4=0
第四輪:s[i]=s[3]='4',會執行v4++;v1++;v2++;v3++;這時候v1=3,v2=3,v3=4,v4=1
第五輪:s[i]=s[4]='5',會執行v4++;v1++;v2++;v3++;這時候v1=4,v2=4,v3=5,v4=2
第六輪:s[i]=s[5]='2',會執行v2++;v3++;這時候v1=4,v2=5,v3=6,v4=2
第七輪:s[i]=s[6]='0',會執行v4++;v1++;v2++;v3++;這時候v1=5,v2=6,v3=7,v4=3
所以最后System.out.printf("%d,%d,%d,%d", v4, v1, v2, v3);輸出結果為3,5,6,7
?