switch用法
首先我們要了解:
switch中文的意思就是轉換,break也就是打斷的意思
switch怎麼用,其實和if差不多
switch(變數){
case 常量 :
語句塊
break;
//也可以有多個case
default :
語句塊
break;
}
括號內只可以使用byte,short ,int,char型別的變數(然而這是JDK1.7之前的事)
JDK1.7之後還可以支援一種叫String 型別的變數
現如今已是2018年最新版的就是JDK1.10了
那麼為什麼1.7之前只能支援上面的四種呢?
首先我們要知道一個常識:相同型別的東西才可以去比較
計算機也是這樣
因為我們case後免跟的是常量,而常量預設是int型別的
byte,short,char運算時自動提升成int
那麼就變成int型別和int型別比較了
最後一個int也肯定是可以用的
先來一個小栗子:
用if看起來有點麻煩,因為這裡只做了1~3的假如這個數為100呢?
那豈不是要寫100if(寫個簡單的判斷,肯定不可能會去寫這麼多)
那麼來試一下switch吧:
執行結果:
咱們要來理解一下這個switch到底是怎麼判斷的,嗯。
1.得到括號內變數的值,
然後與第一個case後的常量做等值判斷
值相等執行這個case 冒號後的語句
遇到break直接跳出迴圈結束這個switch
2.接下來也是一樣的
假如第一個case的值不想等
就將第二個case的值拿去比較
繼續上面值相等的操作
3.default相當於if中的else
假如一個case都不想等,就執行default里語句
default和else一樣,可以寫可以不寫,完全看需求
我們再看一個小需求,使用switch的另一種方式:
兩種結果
1.月數正確
2.月數錯誤
其實我們只要理解了break這個關鍵字
就可以理解我為什麼case連著寫了
switch中假如遇到了一個case,並且值相等,
就會執行這個case冒號後的語句,
如果在這個語句後面如果沒用break
就會直接執行後面case冒號後的程式碼(無論結果是否相等)
直到遇到一個break時,才跳出(停止)整個switch。
由於1.3.5.7.8.10.12月都是31天
我就把case寫成一排,前面的case冒號後什麼都不寫
只在最後一個case中寫到days = 31 ;
然後在寫一個break;
其實這樣的效率是最高的
假如我們的是1月,第一個case就滿足了
然後就去執行冒號後面發現是空的
就去找下一個case的冒號後面(因為沒遇到break),發現也是空的
直到找到case 12 這個,把days 變成 31 ,遇到break,然後跳出switch
30天的也是一樣的邏輯。