switch和if相關內容總結

2021-08-18 04:16:36 字數 1212 閱讀 9819

第乙個問題:switch和if else的區別:

switch...case與if...else的根本區別在於,switch...case會生成乙個跳轉表來指示實際的case分支的位址,而這個跳轉表的索引號與switch變數的值是相等的。從而,switch...case不用像if...else那樣遍歷條件分支直到命中條件,而只需訪問對應索引號的表項從而到達定位分支的目的。

具體地說,switch...case會生成乙份大小(表項數)為最大case常量+1的跳表,程式首先判斷switch變數是否大於最大case 常量,若大於,則跳到default分支處理;否則取得索引號為switch變數大小的跳表項的位址(即跳表的起始位址+表項大小*索引號),程式接著跳到此位址執行,到此完成了分支的跳轉。

switch...case只能處理case為常量的情況,對非常量的情況是無能為力的。

第二個問題:switch不加break時為什麼具有連通性:

case後面的常量表示式實際上只起語句標號作用,而

不起條件判斷作用

,即"只是開始執行處的入口標號

". 因此,一旦與switch後面圓括號中表示式的值匹配,就從此標號處開始執行,而且執行完乙個case後面的語句後,若沒遇到break語句,就自動進入下乙個case繼續執行,而

不再判斷是否與之匹配

,直到遇到break語句才停止執行,退出break語句.因此,若想執行乙個case分之後立即跳出 switch語句,就必須在此分支的最後新增乙個break語句.

第三個問題:switch和if else的效率誰比較高:

在第乙個問題中我們提到由於跳轉表的存在從而,switch...case不用像if...else那樣遍歷條件分支直到命中條件,而只需訪問對應索引號的表項從而到達定位分支的目的。

當分支較多時,用switch的效率是很高的。因為switch是隨機訪問的,就是確定了選擇值之後直接跳轉到那個特定的分支,但是if  else是遍歷所以得可能值,知道找到符合條件的分支。如此看來,switch的效率確實比ifelse要高的多。

switch...case占用較多的**空間,因為它要生成跳表,特別是當case常量分布範圍很大但實際有效值又比較少的情況,switch...case的空間利用率將變得很低。switch只能是在常量選擇分支時比ifelse效率高,但是if  else能應用於更多的場合,if  else比較靈活。

總結:在多條件分支選擇的情況下使用switch比if else效率高,但是switch語句沒有if else語句靈活。

執行緒相關內容總結

1 corepoolsize 代表核心執行緒數。每當新的任務提交過來的時候,執行緒池就會建立乙個核心執行緒來執行這個任務,即使已經有其他的核心執行緒處於空閒狀態。而當需要執行的任務數大於核心執行緒數時,將不再建立新的核心執行緒。2 maximumpoolsize 代表執行緒所允許的最大數量。即,當阻...

檢測相關內容總結

設取樣點為 y n,n 1,n 這些取樣點由目標訊號 m ae 和i q兩路功率均為 sigma 2 2 的高斯白雜訊 omega n 組成,對應假設 h 0 和 h 1 下 y n 的組成分別為 h 0 y n omega n h 1 y n m omega n 設 z n y n 則對應假設 h...

oracle 許可權相關內容總結

1.系統許可權管理 1.1 3個預設使用者 oracle 9i sys change on install as sysdba sqlplus as sysdba system manager scott triger oracle 10g以上 sys 安裝的時候設定.as sysdba syste...